- Описание проблемы
- Visual-c — фатальная ошибка lnk1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «x86» —
- Как исправить проблему в битности при компиляции?
- Проблема связывания: фатальная ошибка lnk1112: тип компьютера модуля ‘x64’ конфликтует с типом машины назначения ‘x86’ – 12 ответов
- Решения
- Фатальная ошибка lnk1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «x86»
Описание проблемы
win10 64 vs 2022 Произошла следующая ошибка: «ошибка LNK1112: тип компьютера модуля« X86 »конфликтует с типом компьютера назначения« x64 »;
Visual-c — фатальная ошибка lnk1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «x86» —
Как исправить проблему в битности при компиляции?
Я компилирую библиотеку 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 проблема исчезла.