crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в искажения имён функций в LIB-файлах, и как с ними жить.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 12.7.2011, 14:11
 
Цитата(Litkevich Yuriy @ 11.7.2011, 20:01) *
какой-то старой студией

у разных студий разные форматы декорирования. последние студии поддерживают новый стандарт, но отличаются от старых. я не помню точно, кажется, начиная с 6-й студии пошёл новый формат. но может, и после неё.
Danila_Bagrofff Дата 12.7.2011, 10:39
  Litkevich Yuriy,
а если попробовать все-таки преобразовать либу под mingw формат?...

У меня почему-то никак на выходе не получается нормальный .a файл. Пустой и все... =(
Litkevich Yuriy Дата 12.7.2011, 9:25
  я a-файл вообще не делал.
Danila_Bagrofff Дата 12.7.2011, 9:01
  - проблема вызова функции (это фактически API для работы с P-CAD) из библиотеки dbx32.dll (dbx32.lib)
- чем собрана уже уточнили =)

Litkevich Yuriy,
а у меня че-то перестала .a либа собираться =((( В чем трабла не пойму...

Litkevich Yuriy,
А вы пробовали аналогично ручками поправить, как там дефник и подгузить .a либу?

Может, если у вас получится, дадите .a файл?) Вместе с другими исходниками. Был бы благодарен. Дальше бы пробовал побеждать =)
Litkevich Yuriy Дата 11.7.2011, 18:01
  к стати, из твоей же ссылки, чувак пишет что изменение декларации привело к новым проблемам по-этому он поступил так:
Цитата
So I found another way out,
with pexports I create a .def file
in the .def file I add a @nn decoration to each function by hand
I create a import library with dlltool with the -k switch

Now it works but I've to do the step 2 by hand, do you know how I can get this done by some routine?
(yes, I know I could write down a routine by myself, but why bother if it already exists?)


Цитата(Iron Bug @ 11.7.2011, 21:00) *
чем собрана библиотека, которую загружаешь
какой-то старой студией
Iron Bug Дата 11.7.2011, 18:00
 
Цитата(Danila_Bagrofff @ 11.7.2011, 16:28) *
Подскажите, где я теперь косяк?

ты сначала уточни, что у тебя за проблема:
что ты загружаешь, как загружаешь, в какой системе и чем оно собрано и где и как ты собираешь свой проект.
я так понимаю, у тебя венда и мингв. под 32 бита (кстати, битность - ещё одна проблема во взаимодействии библиотек).

вопрос в том, чем собрана библиотека, которую загружаешь. и что оттуда экспортируется (классы, функции, данные)?
Litkevich Yuriy Дата 11.7.2011, 17:59
 
Цитата(Danila_Bagrofff @ 11.7.2011, 20:23) *
А extern "C" включено, или выключено у тебя?
присутсвует
Danila_Bagrofff Дата 11.7.2011, 17:23
  такое ощущение, что не находится данная функция в либе.

Попробовал реимпов получить .a файл. Он у меня пустой =(((

Может, поможите .a файл сделать?
Пробую сделать так:

reimp -d Dbx32.lib
dlltool -D Dbx32.dll -d Dbx32.def -l Dbx32.a -k

Но dbx32.a - пустой =((



Litkevich Yuriy,
А extern "C" включено, или выключено у тебя?
Litkevich Yuriy Дата 11.7.2011, 16:53
  проделал этот же трюк, получил ошибку:
Цитата
tmp/release/mainwindow.o:mainwindow.cpp:(.text+0x19): undefined reference to `TCloseDesign'
tmp/release/mainwindow.o:mainwindow.cpp:(.text+0x309): undefined reference to `TCloseDesign'
tmp/release/mainwindow.o:mainwindow.cpp:(.text+0x3cc): undefined reference to `TOpenDesign'
...


П.С.
вспомнил, что когда-то у меня была такая ошибка.
Danila_Bagrofff Дата 11.7.2011, 13:28
  Нашел интересную инфу:
http://forums.codeblocks.org/index.php?PHP...g62081#msg62081

В особенности:
Цитата
I've replace
#define DLLX __stdcall


with
#define DLLX __cdecl


in DBx32.h and now I get a beautiful
Цитата
Process terminated with status 0 (0 minutes, 26 seconds)
0 errors, 0 warnings


Это в файле dbx32.h подменили. так проблема с @16 вроде как пропала. Но не получается заюзать функцию.

Пытаюсь теперь заюзать в кути:
DbxContext tContext;
    if(TOpenDesign(DBX_LANGUAGE, DBX_VERSION, "sch", &tContext)==DBX_OK)
    {
        emit(addLog(tr("!!!!!")));
    }
    return true;


Но выдается ошибка:

Цитата
mingw32-make: Leaving directory `D:/Program/LoodsmanContext'

debug/DialogPE3.o:D:\Program\LoodsmanContext/DialogPE3.cpp:262: undefined reference to `TOpenDesign(long, long, char const*, DbxContext*)'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\LoodsmanContext.exe] Error 1

mingw32-make: *** [debug] Error 2

Процесс "D:/Qt/2010.05/mingw/bin/mingw32-make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта LoodsmanContext (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"


Подскажите, где я теперь косяк?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 1:28