Я пытаюсь использовать стороннюю DLL (я компилирую с использованием MinGW), но у меня возникают некоторые проблемы.Прежде всего, DLL экспортирует недекорированные имена, но объявление функций, видимых в заголовочных файлах, содержит «__stdcall».Кроме того, я использую C ++, но я выделил включение с помощью 'extern "C"'.
Ошибка:
неопределенная ссылка на `Play_Stop @ 4 '
Я пытался связать напрямую с DLL, так как G ++ теоретическиспособен сделать это, но у меня есть некоторые "неопределенные ссылки".
Затем я попытался сгенерировать файл .def
, используя gendef (gendef theirDLL.dll
), а позже я использовал dlltool
для создания библиотеки импорта: dlltool -k --no-leading-underscore -d theirDLL.def -D theirDLL.dll -l theirDLL.a
.Обратите внимание, что я использовал --no-leading-underscore
, как я заметил с nm
, что всем функциям предшествовало одно подчеркивание, что вызывало проблемы.
Однако, даже делая все это, я не могу связать его должным образом.Есть идеи?
Я проверил, что компоновщик находит статическую библиотеку.
Объявление функции в заголовочном файле:
BOOL __stdcall Play_Stop(LONG nPort);
Директива include:
extern "C"{
#include "PlaySDK.h"
}
Вывод команды nm (themDLL.a)
...
daazs00103.o:
00000000 b .bss
00000000 d .data
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 t .text
00000000 T Play_Stop@4
00000000 I __imp_Play_Stop@4
...
И ошибка:
неопределенная ссылка на `Play_Stop @ 4 '
Заранее спасибо!