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

Я использую Visual Studio 2010 Premium. У меня есть два проекта A и B, и я пытаюсь скомпилировать их на 64-битную платформу.
Проект A выводит файлы .dll и .lib, на которые опирается проект B.
Я уже успешно скомпилировал проект A для 64-битная платформа, но при компиляции проекта BI получаю следующую ошибку:

mfcs100d.lib (nolib.obj): фатальная ошибка LNK1112: тип машины модуля 'X86' конфликтует с типом целевой машины 'x64'

В чем может быть проблема ? Я действительно не знаю, что это за файл mfcs100d.lib.
Я использовал "Dependency Walker" в файле dll проекта A, и, похоже, он полагается исключительно на 64-битные файлы dll. Кроме того, я перешел к проекту B (Страницы свойств -> Свойства конфигурации -> Компоновщик -> Дополнительно) и подтвердил, что для параметра «Целевая машина» установлено значение «MachineX64». Кроме того, в Configuration Manager платформа установлена ​​на x64.

Кто-то сообщил мне, что проблема может быть такой:

Переходя к проекту B (Страницы свойств -> Свойства конфигурации -> C \ C ++ -> Препроцессор -> Определения препроцессора), у меня есть следующие значения:

WIN32  
_DEBUG  
_WINDOWS  
_AFXEXT  

Это действительно связано? Стоит ли заменить значение WIN32? если да, то как? Я действительно не понимаю значения этих определений и того, как их изменить.

Изменить: я просто понял, что, вероятно, это вообще не связано. Это просто определения препроцессора, такие как те, которые могут быть определены командой C ++ #define. Но я мог ошибаться.


person The_Mundane    schedule 10.01.2012    source источник
comment
Не избавляйтесь от WIN32, даже при компиляции 64-битного кода это все еще API Win32, поэтому вам нужно определить WIN32.   -  person jcopenha    schedule 10.01.2012


Ответы (2)


Довольно сложно ошибиться. Начните с Build + Configuration Manager и дважды проверьте, что для обоих проектов выбрано x64. Следующим шагом является проверка пути поиска библиотеки. Щелкните правой кнопкой мыши проект, Свойства, Каталоги VC ++, Каталоги библиотек. Щелкните стрелку поля со списком, чтобы просмотреть «Унаследованные значения». $ (VCInstallDir) atlmfc \ lib \ amd64 должен быть вторым в списке, именно там находится 64-битная версия mfcs100d.lib.

person Hans Passant    schedule 10.01.2012
comment
Первое значение в списке - $ (VCInstallDir) bin \ x86_amd64, второе - $ (VCInstallDir) bin. Как я могу изменить 1-е значение на $ (VCInstallDir) atlmfc \ lib \ amd64? Похоже, что я не могу переписать эту программу, и добавление нового элемента вызвало у меня ошибку. - person The_Mundane; 10.01.2012
comment
Вы ошиблись настройкой, смотрите Каталоги библиотек, а не Исполняемые каталоги. - person Hans Passant; 10.01.2012
comment
Ах да, прости. Да, там действительно написано значение $ (VCInstallDir) atlmfc \ lib \ amd64, поэтому мне интересно, в чем проблема. - person The_Mundane; 10.01.2012

Когда вы добавляете цель x64, перейдите в Общие настройки и посмотрите Выходной каталог и Промежуточный каталог. Для цели отладки измените "Debug" на "Debug64", то же самое для цели Release.

person NearChaos    schedule 16.08.2012
comment
Не могли бы вы добавить снимок экрана? - person Automate This; 22.11.2013