Связывание 64-битных dll mingw - PullRequest
3 голосов
/ 12 октября 2011

Я связываю dll с некоторыми зависимостями от других dll.У меня проблема со связыванием 64-битной версии моего проекта.С 32-битной версией все в порядке, поскольку я использую mingw32.Но когда я переключаюсь на 64-битную версию зависимых dll и mingw-w64, она говорит следующее:

c:/.../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible .\lib\native/libblabla.dll when searching for -llibblabla

Где 'libblabla' - это библиотека, от которой я зависим.Я абсолютно уверен, что это 64-битная версия и должна быть совместимой.Это ошибка в mingw?

Кроме того, я попытался связать, используя файл lib, но при условии, что lib также считается несовместимым, а тот, что сгенерирован dlltool, не имеет созданной таблицы импорта!

IЯ полностью застрял с этим.Спасибо.

1 Ответ

2 голосов
/ 12 октября 2011

Во-первых, чтобы избежать возможных недоразумений:

  1. GCC / ld может ссылаться на (правильно экспортирующий) 32-битные библиотеки DLL и .lib / .a библиотеки импорта и статические библиотеки..
  2. GCC / ld должен иметь возможность связываться с правильно экспортируемой 64-битной DLL или .a импортной или статической библиотекой, но никогда с 64-битным .lib файлом.
  3. YouВы не строите / не связываете с -m32, не так ли?

Под «правильным экспортом» я подразумеваю, что dumpbin /exports или nm -t показывают экспортированные символы при запуске в DLL.

Что вы должны попробовать:

  1. Построить через вызов gcc, а не любые прямые вызовы binutils.Опции -shared -o name.dll -Wl,--import-lib, libname.dll.a должны помочь вам начать работу.

  2. Используйте MinGW-w64 gendef (он находится в каталоге mingw-w64-tools в их SVN / sources) для генерации файла .def,которую вы можете создать библиотеку импорта.

Если в библиотеке импорта нет символов, вы не экспортируете никаких символов.Хотя это было бы удивительно, так как в сообщении об ошибке говорится, что dll является 32-битным.Что MSYS / Cygwin's file команда на dll возвращает?

...