LINUX.ORG.RU

Проблема с MinGW


0

0

Я компилирую свою линуксовую программу (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, короче бред какой-то.

В общем, я не знаю куда теперь копать и был бы очень признателен за любую помощь!

anonymous

скорее всего это проблема борланда, он вроде в длл добавляет к именам функций знак подчеркивания, если возможно пересобрать борландовскую либу, то эта "фича" где-то там отключается, а так наверно придется в исходниках твоей проги и включаемых файлах все имена подправить, т.е. добавить это самое долбанное подчеркивание.

зы: возможно все это бред, тогда сорри, т.к. давно уже не программлю на под винду, но точно помню, что какая-то проблема с подчеркиваниями была

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.