Я переношу свой проект с 32 на 64 бита в Windows, используя mingw64.
Все компилируется/связывается нормально, однако у меня есть некоторые проблемы во время выполнения: программа падает при вызове функций, на которые ссылается другая DLL, например. по такой инструкции:
0x574040 ff 25 e8 66 6a 00 jmpq *0x6a66e8(%rip) # 0xc1a72e <_ZN12QTableWidget18currentCellChangedEiiii+638>
В приведенном выше примере используется функция Qt, вызываемая при запуске приложения, но у меня есть аналогичные проблемы с другими DLL.
Странная вещь: у меня проблема с библиотеками Qt DLL только в режиме выпуска (это означает, что я использую другой набор DLL, имена которых заканчиваются на 'd
').
В режиме отладки у меня похожая проблема, но только с одной библиотекой. И с помощью этой библиотеки я смог динамически загружать функции (используя QLibrary) поэтому DLL не кажется недействительной.
Я провел целый день, пытаясь понять, что не так, но у меня нет дополнительных идей:
- Файлы DLL и исполняемые файлы отображаются как «формат файла pei-x86-64» при их objdump.
- Предполагается, что они были скомпилированы с помощью одного и того же компилятора (за исключением упомянутой мной дополнительной библиотеки, которая была скомпилирована с помощью MSVC, но имеет только интерфейс C)
- Файлы DLL на самом деле присутствуют рядом с exe-файлом (иначе я бы столкнулся с осмысленной ошибкой «X.DLL отправляется с вашего компьютера»).
Если у кого-то есть какие-либо подсказки, пожалуйста, дайте мне знать!