2009-09-08 1 views
7

ith Visual Studio 2008, если тип конфигурации является статической библиотекой, я не вижу в объектах свойств компоновщика. Мне нужно указать параметр/MACHINE: x64 для статической библиотеки. Я попытался указать это в командной строке в Librarian. Только тогда я смогу создать статическую библиотеку. Если я не укажу/MACHINE компиляция статической библиотеки с ошибкой LNK1112: тип модуля модуля «X86» конфликтует с типом целевой машины «x64» (даже если я установил платформу для X64 для моего решения).компиляция статической библиотеки C++ для платформы с 64-битными окнами с использованием VS2008

С/MACHINE: X64, указанный в качестве командной строки через Project-Properties-Librarian, статическая библиотека была построена, но другой проект (типа конфигурации: DLL) в том же решении имеет зависимость от статической библиотеки lib, когда DLL построен и пытается использовать одну из функций в Lib я снова получаю ту же ошибку:

фатального LNK1112 ошибки: модуль типа машины конфликтов «x86» с типом целевой машины «x64»

Пожалуйста, предложите, как я создаю 64-битную статическую библиотеку

ответ

1

Вы пытались добавить новую конфигурацию проекта (x64) в th существующий проект?

Обычно вам не нужно редактировать свойства проекта, чтобы построить его на 64-битной основе. Вам просто нужно добавить конфигурации и убедиться, что конфигурация решения верна (конфигурация 64-битного решения содержит 64-битные конфигурации проекта).

Вы можете проверить это, открыв Build-> Configuration Manager. Моя Visual Studio иногда сталкивается с этими настройками и делает проект несовместимым, поэтому проверка его может помочь.

8

Для чего это стоит, я столкнулся с такой же проблемой.

У меня есть проект, который скомпилирует статическую библиотеку, а создание конфигурации «x64» НЕ привело к таргетингу на x64. Мне пришлось явно добавить «/ MACHINE: X64» в качестве «дополнительной опции» в разделе «Библиотекарь -> Командная строка» на страницах свойств проекта, как и вы.

Я бы ожидал, что визуальная студия будет подвергать этот параметр первоклассному свойству на страницах свойств, как это делается для динамических библиотек (в разделе «Linker -> Advanced -> Target Machine»). Возможно, я что-то упустил.

2

Как уже упоминалось Timbo, вам необходимо убедиться, что у вас есть конфигурация x64, которую вы строите. Тем не менее, есть несколько других подводных камней, чтобы быть в курсе:

  • ли в общей сложности в чистоте вашего каталога сборки первой в случае, если вы все еще есть 32 битные объектные файлы, лежащие вокруг, которые вызывают путаницу
  • Проверьте промежуточные и выходные каталоги для вашего проекта. Если пункт назначения - Debug\Mylib.lib, тогда вы столкнетесь с проблемами, поскольку одно и то же имя используется для 32-разрядных и 64-разрядных библиотек. Я предпочитаю выбирать все конфигурации и все платформы, а затем переименовывать их все в нечто стандартное, например ..\build\$(ProjectName)\$(ConfigurationName).$(PlatformName)
  • Завершите диспетчер конфигурации, что при построении 64-разрядной конфигурации решения, которое оно настроено для сборки 64-разрядной конфигураций проектов (это не всегда происходит по умолчанию)
  • Ошибка: module machine type 'X86' conflicts with target machine type 'x64' означает, что объектный файл был построен как 32-битный, но настройка ссылки проекта установлена ​​с флагом /machine:x64.Таким образом, это говорит о том, что конфигурация проекта 32-разрядная.
  • Если у вас возникли сомнения относительно того, что вы создали, выбрать один из объектных файлов и введите в командной строке:

    dumpbin /headers myfile.obj | findstr machine

Это покажет вам архитектуру вы на самом деле встроенный.

+0

Я не понимаю пункт 4, что вы имеете в виду «построенный как 32-битный, но настройка ссылки проекта установлена ​​с помощью флага/машины: x64». Я вижу только одну точку, в которой вы можете установить/тип машины. –

+0

Верно, что в конфигурации есть только одна точка, где вы можете установить тип, но может случиться так, что 32-разрядная и 64-разрядная конфигурация завершаются в один и тот же выходной файл, что приведет к возникновению этой ошибки. Это также может произойти, если вы используете проекты «NMAKE», а не визуальные студии. –

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