visual-c — фатальная ошибка LNK1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «X86» —

visual-c   - фатальная ошибка LNK1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «X86» - Компьютер

Описание проблемы

win10 64 vs 2022 Произошла следующая ошибка: «ошибка LNK1112: тип компьютера модуля« X86 »конфликтует с типом компьютера назначения« x64 »;

Visual-c — фатальная ошибка lnk1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «x86» —

Я исправил эту проблему для себя следующим образом.

Прежде всего, я следил за другими ответами на этот вопрос, только чтобы сделать вывод, что все настройки проекта были правильными.

Затем я проверил файл .vcxproj с помощью редактора и заметил, что в свойствах

для двух конфигураций x64 (Debug и Release) не указан

, в то время как обе конфигурации Win32 содержат MachineX86 .

Однако я уже убедился, просмотрев в Visual Studio Свойства > Свойства конфигурации > Компоновщик > Дополнительно > Целевая машина, что в конфигурациях x64 указано MachineX64 (/MACHINE:X64).

Итак, я отредактировал файл .vcxproj, включив < TargetMachine > MachineX64 < /TargetMachine > в две конфигурации x64. Возвращаясь к диалоговому окну свойств проекта Visual Studio, я заметил, что параметр MachineX64 (/MACHINE:X64) был там, как и раньше, за исключением того, что теперь он выделен жирным шрифтом (очевидно, это означает, что значение не является значением по умолчанию).

Я восстановил, и это сработало.

Я написал об этом запись в блоге, так как столкнулся с этой сводящей с ума проблемой и, наконец, вернул мою систему в рабочее состояние.

Вот что нужно проверить в таком порядке:

  1. Проверьте параметры свойств в настройках компоновщика: Свойства > Свойства конфигурации > Компоновщик > Дополнительно > Целевая машина. Выберите MachineX64, если вы нацелены на 64-битную сборку, или MachineX86, если вы делаете 32-битную сборку.

  2. Выберите «Сборка» > «Диспетчер конфигураций» в главном меню Visual Studio. Убедитесь, что для вашего проекта указана правильная платформа. IDE можно настроить на сборку x64, но отдельный проект в решении можно настроить на win32. Так что да, визуальная студия оставляет много веревок, на которых можно повеситься, но такова жизнь.

  3. Проверьте файлы вашей библиотеки, чтобы они действительно соответствовали типу платформы, на которую нацелены. Это можно использовать с помощью dumpbin.exe, который находится в каталоге Visual Studio VCbin. используйте параметр -headers, чтобы сбросить все ваши функции. Найдите запись машины для каждой функции. он должен включать x64, если это 64-битная сборка.

  4. В Visual Studio выберите Инструменты > Параметры в главном меню. выберите Проекты и решения > Каталоги VC . Выберите x64 в раскрывающемся списке «Платформа». Убедитесь, что первой записью является: $(VCInstallDir)binx86_amd64, за которой следует $(VCInstallDir)bin.

Как только я сделал шаг 4, все снова заработало для меня. Дело в том, что я сталкивался с этой проблемой во всех своих проектах, где я хотел скомпилировать 64-битную цель.

У меня возникла та же проблема в VS2008, когда я попытался добавить сборку X64 в проект, преобразованный из VS2003.

Я просмотрел все, что нашел при поиске этой ошибки в Google (целевая машина, каталоги VC , DUMPBIN….), и все выглядело нормально.

Наконец, я создал новый тестовый проект и внес те же изменения, и, похоже, он сработал.

Выполнение различий между файлами vcproj выявило проблему….

В моем преобразованном проекте параметр /MACHINE:i386 был установлен в качестве дополнительного параметра в Linker->Command Line. Таким образом, было установлено две опции /MACHINE (и для x64, и для i386), и предпочтение отдавалось дополнительной.

Удалив это и правильно настроив в Linker-> Advanced-> Target Machine, проблема исчезла.

Это очень разочаровывающая и раздражающая проблема, но как только вы ее поймете, это будет довольно просто: у вас есть какой-то элемент в вашей сборке, который создает один тип архитектуры (в вашем случае x64), несмотря на то, что он был предназначен для другого типа (скажем, x86). ).

Вы можете проанализировать источник вашей проблемы, посмотрев, какой файл obj вызывает сбой, и начать искать проблему там. Каждый obj будет иметь аналог исходного кода: либо в cpp, либо в c, asm и т. д. Вокруг него могут быть специальные события сборки, которые используют неправильный инструмент. Проверьте это в листах свойств.

Я бы сначала посмотрел туда, прежде чем переходить к списку того, что нужно сделать C Johnson.

Много хороших предложений выше.

Также, если вы пытаетесь собрать x86 Win32:

Убедитесь, что любые библиотеки, на которые вы ссылаетесь в Program Files (x86), на самом деле являются библиотеками x86, потому что они не обязательно…

Например, файл lib, с которым я связался в C:Program Files (x86)Microsoft Visual Studio2022ProfessionalSDK, выдал эту ошибку, в конце концов я нашел его версию x86 в C:Program Files (x86)Windows. Kits10Lib10.0.18362.0umx86 и все заработало нормально.

Как исправить проблему в битности при компиляции?

Я компилирую библиотеку QHTTPEngine, на Windows 7 64-bit для qt 5.7. У меня установлен Visual Studio 2022 Community. В Qt Creator мне доступны такие компиляторы: Desktop Qt 5.7.0 MSVC2022 64 bit(amd 64) и 64bit 2(x86_amd64), а также MinQW 32-bit.

Делаю все, как описано в Readme. Установил CMake, добавил в Path, добавил в Path также папку C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin
Запустил vcvarsall.bat с параметром x86_amd64, чтобы настроить переменные среды. Потом запускаю в командной строке cmake -G "NMake Makefiles" .. — все генерируется. Потом, когда я запускаю nmake, вылазит куча ошибок от cl.exe с кодами "0x2" и "0xffffff". Уже второй день не могу установить.

При этом, все собирается и компилируется, если в bat файл передать параметр x86, но тогда Qt Creator выдает ошибку QHttpEngine.lib(QHttpEngine.dll):-1: ошибка: LNK1112: тип компьютера модуля "X86" противоречит типу целевого компьютера "x64".

Подскажите, пожалуйста, как исправить проблему. Хочу запустить хотя бы простейший example.

Проблема связывания: фатальная ошибка lnk1112: тип компьютера модуля ‘x64’ конфликтует с типом машины назначения ‘x86’ – 12 ответов

Я знаю, что это немного устарело, но я подумал, что дам еще один совет.
В моей ситуации я унаследовал это приложение, которое мне пришлось поддерживать.
Проект VS2008 поставляется с той же строкой в ​​C/С → OutputFIles → «ObjectFIleName» и «Program Database File Name» (для обеих платформ Win32 и x64).
Поэтому, когда я построил платформу Win32, она построена отлично, но когда я попытался создать x64, я получил ошибку:

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

Очевидно, что оба patforms сохраняли common.obj в одном месте, поэтому, когда я пытался создать x64, компоновщик взял существующий файл объекта, который был x86.

Чтобы исправить, я просто заменил существующую строку макросом «$ (IntDir) » для x64 (без кавычек) и удостоверился, что макрос решил правильный путь, как и в остальных проектах.
Это решило мою проблему.

Решения

Есть две вещи, которые нужно установить:

1. Щелкните правой кнопкой мыши проект, выберите «Свойства», нажмите «Configuration Manager» вверху, создайте новую платформу «win32», затем выберите win32 в качестве активной платформы решения и нажмите «Закрыть».

2. Выберите «Linker» -> «Advanced» на странице свойств, и внутри есть элемент с именем Target Computer, измените его на: MachineX64 (/ MACHINE: X64), а затем нажмите OK.

Восстановить решение и решить проблему!

Описание: поскольку мы создаем 32-разрядный проект, а компьютерная система является 64-разрядной, платформой проекта является «win32», а целевой компьютер изменяется на «x86», как показано ниже:

Примечание. Если описанный выше метод не удался, щелкните правой кнопкой мыши проект и выберите «Чистое решение», а затем выполните перестройку в соответствии с приведенной выше конфигурацией.

Если проблемы не устранены, проверьте, есть ли в проекте другие файлы .dll. Указанные выше свойства не были изменены. После завершения всех изменений регенерация должна быть в порядке. ,

Примечание. Следует также обратить внимание на разработку платформы X64: если вы занимаетесь разработкой 64-битной версии, файлы DLL, на которые есть ссылки в проекте, не могут быть 32-битными файлами DLL, иначе во время работы произойдет ошибка.

То же самое относится и к 32-битной разработке. На 64-битные DLL-файлы нельзя ссылаться.

Фатальная ошибка lnk1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «x86»

Я столкнулся с той же проблемой в VS2008, когда пытался добавить сборку X64 в проект, преобразованный из VS2003.

Я посмотрел на все, что было найдено при поиске этой ошибки в Google (целевой компьютер, каталоги VC , DUMPBIN ….), и все выглядело нормально.

Наконец, я создал новый тестовый проект и сделал те же изменения, и это, похоже, сработало.

Выполнение различий между файлами vcproj выявило проблему ….

В моем преобразованном проекте / MACHINE: i386 был установлен в качестве дополнительной опции в Linker-> Command Line. Таким образом, было установлено два параметра / MACHINE (как x64, так и i386), и дополнительный получил преимущество.

После удаления и правильной настройки в Linker-> Advanced-> Target Machine проблема исчезла.

Оцените статью
OverComp.ru