фатальная ошибка LNK1112: тип компьютера модуля «x64» конфликтует с типом машины назначения «X86» - PullRequest
163 голосов
/ 25 августа 2010

Я использую CUDA (VC ++, Visual studio 2008sp1) для отладки программы FEM. Программа может работать только на платформе Win32, из-за недостатка cuda. Я думаю, что все связанные библиотечные файлы скомпилированы на платформе x86, но при компиляции я получаю сообщение об ошибке «Неустранимая ошибка LNK1112: тип компьютера модуля« x64 »конфликтует с типом целевой машины« X86 »».

Я пытался преобразовать платформу в x64, но это не сработало. Скажите, пожалуйста: что такое «тип машины модуля» и что такое «тип машины цели»? Как я могу преодолеть это?

Ответы [ 23 ]

1 голос
/ 28 октября 2013

Если в вашем решении есть проекты lib, проверьте свойство Target Machine в Property-> Librarian-> General

1 голос
/ 17 октября 2015

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

"...; $ (VC_LibraryPath_x86); $ (WindowsSDK_LibraryPath_x86);"

вместо _x64.

1 голос
/ 08 августа 2018

Я решил эту проблему, изменив Win32 на * 64 в Visual Studio 2013.

1 голос
/ 25 июля 2013
"project property - CUDA Runtime API - GPU - NVCC Compilation Type"

Установить 64-битную опцию компиляции -m64 -cubin

Подсказка при журнале компиляции.Например:

nvcc.exe ~~~~~~ -machine 32 -ccbin ~~~~~

Проблема "-machine 32".

Первый вариант 64-битной компиляции, следующий параметр гибридной компиляции.Тогда ты сможешь увидеть успех.

1 голос
/ 29 сентября 2017

Файл vcxproj может содержать 'MACHINE: i386' Редактировать файл vcxproj с помощью редактора.удали это!

1 голос
/ 29 января 2017

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

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

Я бы сначала посмотрел туда, прежде чем переходить к списку вещей, которые должен сделать С. Джонсон.

1 голос
/ 31 января 2016

Я использовал CMake, а затем добавил конфигурацию win32. Страница свойств показала x86 , но на самом деле при открытии файла vcxproj в текстовом редакторе это было x64! Ручное переключение на x86 решило эту проблему.

0 голосов
/ 09 июля 2019

Для тех, кто работает с QT Creator, проблема такая же (как описано в @ c-johnson).Убедитесь, что настройки компилятора для MSVC в вашем наборе установлены на x86, как показано ниже.

QT Creator Kit Settings for MSVC x86 compiler

0 голосов
/ 02 марта 2017

это случается со мной, когда я конвертирую свое решение VS2008 в VS2010 и меняю конфигурацию win32 на X64, в моем старом решении у меня есть mfcs90d.lib (Configuration-> Linker-> Input-> Дополнительные зависимости), так как я использую VS010Я только что проверил в папке VS2010, где он находится mfcs100d.lib, поэтому я изменил mfcs90d.lib на mfcs100d.lib в (Configuration-> Linker-> Input-> Дополнительные зависимости), он работал нормально.

0 голосов
/ 02 июня 2016

Прежде всего попробуйте следующее: 1. зайдите в диспетчер конфигурации и создайте новый x64, если его там еще нет. 2. выберите решение x64. 3. Перейдите в свойства проекта и затем Linker-> Advanced выберите x64 machine. 4. Теперь перестройте решение.

Если вы все еще получаете ту же ошибку. попробуйте чистое решение, а затем пересоберите заново и откройте visual studio, вы получите список недавно открытых проектов, щелкните правой кнопкой мыши проект и удалите его оттуда. Теперь перейдите к решению и снова откройте решение.

...