Я компилирую свою линуксовую программу (C++) под виндой при помощи MinGW и у меня возникла такая проблема. Мне нужно слинковать ее динамически с одной DLL-кой, которая была собрана в Borland'е, назовем ее testdll.dll (тоже C++, функции там объявлены как extern "C" _stdcall, есть также testdll.lib). Я следовал инструкциям с сайта MinGW (http://www.mingw.org/mingwfaq.shtml#faq-msvcdll) (правда, там речь идет о VC, но наверное это не принципиально):
$ pexports testdll.dll | sed "s/^_//" > testdll.def
$ dlltool -U -d testdll.def -l libtestdll.a
и потом собирал программу с -ltestdll. Однако на этапе линковки вываливаются undefined references с функциями из этой dll-ки, причем имена заманглены таким образом: _imp__funcName(). Заглянув в libtest.a, я обнаружил такую картину:
$ nm libtestdll.a | grep funcName
00000000 I __imp__funcName
00000000 T _funcName
То есть, насколько я понял, мы имеем лишний знак подчеркивания в начале. Тогда я попытался убрать у dlltool параметр -U, который это, казалось бы, делает:
$ rm libtestdll.a
$ dlltool -d testdll.def -l libtestdll.a
Однако, ничего не изменилось и в libtestdll.a лишнее подчеркивание осталось.
Честно говоря, я теряюсь и не знаю что с этим дальше делать. Пробовал играться и с другими опциями dlltool, но это не помогло. Пробовал править исходник dlltool на предмет тупого удаления лишнего подчеркивания, но под MinGW собрать binutils -- это pain in ass, как мне показалось, а под Linux'ом собранный dlltool вообще повел себя странно:
$ ./dlltool -d testdll.def -l libtestdll.a
./dlltool: Can't open .lib file: libtestdll.a
Он почему-то не открывает файл libtestdll.a для записи 8o, короче бред какой-то.
В общем, я не знаю куда теперь копать и был бы очень признателен за любую помощь!