crossplatform.ru

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

> искажения имён функций в LIB-файлах, и как с ними жить.
Litkevich Yuriy
  опции профиля:
сообщение 30.12.2010, 22:20
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Возникла проблема с линковкой чужой dll-ки (точнее lib-файла) к своему приложению написанному на Qt/MinGW32.

получаю сообщения об ошибке:
tmp/debug/mainwindow.o: In function `ZN10Mainwindow5startEv':
L:/Repository/EDATools/P-CAD_interface/DBXSamp4Port2Qt4/src/mainwindow.cpp:33: undefined reference to `_Z11TOpenDesignllPKcP10DbxContext@16'
L:/Repository/EDATools/P-CAD_interface/DBXSamp4Port2Qt4/src/mainwindow.cpp:45: undefined reference to `_Z12TGetFirstNetP10DbxContextP4TNet@8'
L:/Repository/EDATools/P-CAD_interface/DBXSamp4Port2Qt4/src/mainwindow.cpp:50: undefined reference to `_Z11TGetNextNetP10DbxContextP4TNet@8'
L:/Repository/EDATools/P-CAD_interface/DBXSamp4Port2Qt4/src/mainwindow.cpp:59: undefined reference to `_Z12TCloseDesignP10DbxContextPKc@8'
tmp/debug/mainwindow.o: In function `ZN10Mainwindow4exitEv':
L:/Repository/EDATools/P-CAD_interface/DBXSamp4Port2Qt4/src/mainwindow.cpp:68: undefined reference to `_Z12TCloseDesignP10DbxContextPKc@8'
collect2: ld returned 1 exit status
MinGW пытается искать искажённые имена. А Dll-ка выглядит так:
Прикрепленное изображение

DLL-ка создана студийным компиллером, неизвестной версии. Бибилотека, как указано в её описании, пригодна для компиляции как Си так и Си++ компиляторами, без привязки к конкретному производителю компилятора.

Однако, в случае с плагином Qt, для поддержки СУБД Firebird, такой проблемы нет. Хотя тамошние lib и dll тоже студийные и тоже не имеют искажений имён.

В чём может быть проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 11.7.2011, 13:15
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Danila_Bagrofff @ 11.7.2011, 16:03) *
А как это врукопашную?
с помощью QLibrary загружаю, фрагмент:
Design::Design(DesignType atype)
        :dbxLib("Dbx32")
        ,type(atype)
{
    Q_ASSERT_X(dbxLib.load(),
               "Design::Design(DesignType type)",
               "Dbx32 unable to load");
...
}

Net Design::firstNet()
{
    typedef long DLLX (*TGetFirstNet)(DbxContext* pContext,
                                      TNet* pNet);
    TGetFirstNet getFirstNet;
    getFirstNet = (TGetFirstNet)dbxLib.resolve("TGetFirstNet");

    Q_ASSERT_X(getFirstNet,
               "Design::nets()",
               "Unable to resolve \"TGetFirstNet\"");
    
    TNet dbxNet;
    dbxStatus = getFirstNet(&dbxContext, &dbxNet );

    Net net(new NetPrivate(dbxNet));
    return net;
}
где dbxLib экземпляр QLibrary
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Danila_Bagrofff
  опции профиля:
сообщение 11.7.2011, 13:28
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 16.4.2009
Из: Нижний Новгород
Пользователь №: 690

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нашел интересную инфу:
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 (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"


Подскажите, где я теперь косяк?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Litkevich Yuriy   искажения имён функций в LIB-файлах, и как с ними жить.   30.12.2010, 22:20
- - igor_bogomolov   В чём может быть проблема не знаю, просто в качест...   31.12.2010, 0:57
- - Litkevich Yuriy   Не помогло. теперь вывод такой: g++ -enable-stdcal...   31.12.2010, 11:53
- - DEADHUNT   h файл посмотри, может он для C предназначен, доба...   31.12.2010, 15:28
- - Litkevich Yuriy   DEADHUNT, Хм-м-м. Сделал так: extern "C" {...   31.12.2010, 16:36
- - Iron Bug   это называется декорирование имён (decoration) либ...   1.1.2011, 15:42
- - Litkevich Yuriy   я пока врукопашную разрешаю имена функций. Времени...   1.1.2011, 16:14
|- - Danila_Bagrofff   Цитата(Litkevich Yuriy @ 1.1.2011, 17:14)...   11.7.2011, 13:03
- - Litkevich Yuriy   Цитата(Danila_Bagrofff @ 11.7.2011, 16:03...   11.7.2011, 13:15
|- - Danila_Bagrofff   Нашел интересную инфу: http://forums.codeblocks.or...   11.7.2011, 13:28
|- - Danila_Bagrofff   такое ощущение, что не находится данная функция в ...   11.7.2011, 17:23
- - Litkevich Yuriy   проделал этот же трюк, получил ошибку: Цитатаtmp/r...   11.7.2011, 16:53
- - Litkevich Yuriy   Цитата(Danila_Bagrofff @ 11.7.2011, 20:23...   11.7.2011, 17:59
- - Iron Bug   Цитата(Danila_Bagrofff @ 11.7.2011, 16:28...   11.7.2011, 18:00
- - Litkevich Yuriy   к стати, из твоей же ссылки, чувак пишет что измен...   11.7.2011, 18:01
- - Danila_Bagrofff   - проблема вызова функции (это фактически API для ...   12.7.2011, 9:01
- - Litkevich Yuriy   я a-файл вообще не делал.   12.7.2011, 9:25
- - Danila_Bagrofff   Litkevich Yuriy, а если попробовать все-таки прео...   12.7.2011, 10:39
- - Iron Bug   Цитата(Litkevich Yuriy @ 11.7.2011, 20:01...   12.7.2011, 14:11


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 21:32