2015-02-20 8 views
1

Я не понимаю, почему DUMPBIN возвращается x64 при выполнении следующих действий в командной строке Студии СЦЕНЫ:DUMPBIN отчетности неправильной целевой архитектуры для статической библиотеки

dumpbin libgmp.lib /HEADERS |more 

Это библиотека GMP составлен под Cygwin 32-битную версию , со следующей конфигурацией сборки:

./configure --host=i386 ABI=32 

Система сборки скомпилировала и построила все файлы успешно для указанного хоста. Тем не менее, dumpbin все еще сообщает, что .a или .lib для 64-битных архитектур.

Обратите внимание, что выходная статическая библиотека - это libgmp.a, но я изменил ее расширение на .lib и связал его с моим проектом Visual Studio без проблем.

Другое важное примечание. Связывание libgmp.lib с 32-разрядными программами в порядке и создает файл PE32, как сообщает CFF Explorer.

Является ли это ошибкой интерпретации свалки, или я пропускаю что-то нездоровое?

+0

Действительно ли 'файл' говорит 64 или 32-битный? –

+0

Это файл: 'libgmp.a: current ar archive' – MyNameIsUser

+0

Ну, это менее полезный вывод, чем можно было бы надеяться. Попробуйте 'objdump -f libgmp.a'. –

ответ

0

Похоже, что нет статических типов библиотек 64bit или 32bit. После выполнения некоторых утверждений в библиотеке с использованием objdump и dumpbin обе сообщали правильную информацию.

objdump сообщил файлов объектов, которые должны быть 64 бит, а остальные 32 бит. dumpbin сделал такой же.

Проблема возникает из системы сборки GMP; Он встроил 64-битные и 32-битные объектные файлы в статическую библиотеку.

Ваша программа будет правильно ссылаться на 32-разрядные приложения, если вы не используете какие-либо объекты, найденные в одном из 64-битных объектных файлов, что объясняет вывод CFF.

Для решения этой проблемы необходимо связаться с веб-сайтом GMP.

Смежные вопросы