Я написал запись в блоге об этом, когда столкнулся с этой сводящей с ума проблемой, и наконец вернул мою систему в рабочее состояние.
Вот что нужно проверить в следующем порядке:
Проверьте параметры свойств в настройках компоновщика: Свойства> Свойства конфигурации> Компоновщик> Дополнительно> Целевой компьютер. Выберите MachineX64, если вы нацелены на 64-битную сборку, или MachineX86, если вы делаете 32-битную сборку.
Выберите Build> Configuration Manager из главного меню в Visual Studio. Убедитесь, что в вашем проекте указана правильная платформа. Возможно, для среды IDE будет установлена сборка x64, но для отдельного проекта в решении может быть задана цель win32. Так что да, визуальная студия оставляет много веревки, чтобы повеситься, но это жизнь.
Проверьте файлы своей библиотеки, что они действительно относятся к типу платформы, на которую ориентированы. Это можно использовать с помощью dumpbin.exe, который находится в каталоге Visual Studio VC \ bin. используйте опцию -headers, чтобы сбросить все ваши функции. Ищите запись машины для каждой функции. он должен включать x64, если это 64-битная сборка.
В Visual Studio выберите Инструменты> Параметры в главном меню. выберите Проекты и решения> Каталоги VC ++. Выберите x64 из раскрывающегося списка Платформа. Убедитесь, что первая запись: $ (VCInstallDir) \ bin \ x86_amd64, за которой следует $ (VCInstallDir) \ bin .
Как только я сделал шаг 4, все снова заработало для меня. Дело в том, что я столкнулся с этой проблемой во всех своих проектах, где я хотел скомпилировать в направлении 64-битной цели.
В дополнение к списку С. Джонсона я бы добавил следующее:
Проверьте в Visual Studio:
Свойства проекта -> Свойства конфигурации -> Компоновщик -> Командная строка.
«Дополнительные параметры» не должны содержать
/machine:X86
У меня есть такой ключ, сгенерированный выходом CMake: CMake сгенерировал проект x86, затем я добавил платформу x64 через
Configuration Manager
Visual Studio 2010 - все было прекрасно создано для новой платформы, за исключением командной строки компоновщика, указанной/machine:X86
отдельно.источник
Я столкнулся с той же проблемой в VS2008, когда пытался добавить сборку X64 в проект, преобразованный из VS2003.
Я посмотрел на все, что было найдено при поиске этой ошибки в Google (целевой компьютер, каталоги VC ++, DUMPBIN ....), и все выглядело нормально.
Наконец, я создал новый тестовый проект и сделал те же изменения, и это, похоже, сработало.
Выполнение различий между файлами vcproj выявило проблему ....
В моем преобразованном проекте / MACHINE: i386 был установлен в качестве дополнительной опции в Linker-> Command Line. Таким образом, было установлено два параметра / MACHINE (как x64, так и i386), и дополнительный получил преимущество.
После удаления и правильной настройки в Linker-> Advanced-> Target Machine проблема исчезла.
источник
Все настройки проекта казались идеальными, но я все еще получил ошибку. Поиск в
.vcxproj
файле и поиск "x86" выявили проблему:Быстрый поиск / замена всех вхождений (десять отдельных настроек файла) устранили проблему.
источник
Поскольку проблема связана с различием в спецификации компиляции и целевой машины (x86 и x64), выполните следующие действия:
Это решило мою проблему.
источник
Возможно, у вас есть один файл .OBJ или .LIB, предназначенный для x64 (это тип компьютера модуля), а вы связываете для x86 (это тип целевой машины).
Используйте DUMPBIN / HEADERS для ваших файлов .OBJ и проверьте наличие записи машины в блоке FILE HEADER VALUES.
источник
В Visual Studio 2012 +/- страница свойств для "Configuration Properties". Линкер. "Командная строка" содержит поле с надписью "Дополнительные параметры". Если вы собираете x64, убедитесь, что в этом поле нет / MACHINE: I386. Мои проекты сделали, и это вызвало ошибку, о которой идет речь.
источник
Я сталкивался с этой проблемой при сборке QT. Инструкции, которые я где-то читал, предложили мне настроить nmake с помощью командной строки VS.
Я выбрал командную строку x64 и выполнил настройку без особых хлопот. Когда я попробовал nmake, он выдал эту ошибку.
Я думаю, что некоторые компоненты были предварительно собраны для 32-разрядных. Ошибка даже сообщила, какие модули были построены для x86.
Я использовал 32-битную командную строку VS по умолчанию, и она работала.
источник
В Visual Studio 2013
1) Проверьте в страницах свойств проекта / свойства конфигурации / компоновщик / все параметры и исправьте все неправильно настроенные машины и каталоги.
2) Проверьте страницы свойств проекта / Свойства конфигурации / Компоновщик / Ввод и исправьте все пропущенные настроенные каталоги.
Смотрите пример 1)
источник
Файл vcxproj может содержать 'MACHINE: i386' Редактировать файл vcxproj с помощью редактора. убери это !
источник
Установите 64-битную опцию компиляции
-m64 -cubin
Подсказка при компиляции журнала. Как это:
Который
"-machine 32"
проблема.Сначала задайте опцию 64-битной компиляции, затем снова установите опцию гибридной компиляции. Тогда ты сможешь увидеть успех.
источник
Если у вашего решения есть проекты lib, проверьте свойство Target Machine в Property-> Librarian-> General
источник
В дополнение к списку Джонсон, также проверьте папки библиотеки
В Visual Studio выберите Инструменты> Параметры в главном меню. выберите Проекты и решения> Каталоги VC ++. Выберите x64 из раскрывающегося списка Платформа.
источник
Это случилось со мной сегодня, потому что я добавил каталог библиотеки еще в режиме x86 и случайно удалил унаследованные каталоги, вместо этого сделав их жестко закодированными. Затем после перехода на x64 мои каталоги VC ++ все еще читают:
"...; $ (VC_LibraryPath_x86); $ (WindowsSDK_LibraryPath_x86);"
вместо _x64.
источник
$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;
Я использовал CMake и затем добавил конфигурацию win32. Страница свойств показала x86, но на самом деле при открытии файла vcxproj в текстовом редакторе это был x64! Ручное переключение на x86 решило эту проблему.
источник
Это очень разочаровывающая и раздражающая проблема, но как только вы ее поймете, все будет довольно просто: в вашей сборке есть какой-то элемент, который строит один тип архитектуры (в вашем случае x64), несмотря на тот факт, что он предназначен для другого типа (скажем, x86). ).
Вы можете проанализировать источник вашей проблемы, посмотрев, какой файл obj вызывает сбой, и начать искать там проблему. Каждый объект будет иметь аналог исходного кода: либо в cpp, c, asm и т. Д. Вокруг него могут быть специальные события сборки, использующие неправильный инструмент. Проверьте это в списках свойств.
Я бы посмотрел там сначала, прежде чем перейти к списку вещей, которые должен сделать C Johnson.
источник
Я решил эту проблему, изменив Win32 на * 64 в Visual Studio 2013.
источник
Тип компьютера модуля - это компьютер, на котором вы компилируете, а тип компьютера назначения - это архитектура x86 или x64, для которой вы строите свои двоичные файлы.
источник
Эта проблема также может возникнуть, если ваш проект настроен на использование одинаковых промежуточных каталогов в свойствах проекта -> Свойства конфигурации -> Общие.
источник
Прежде всего попробуйте сделать следующее: 1. Перейдите в диспетчер конфигурации и создайте новый x64, если его там еще нет. 2. выберите решение x64. 3. Перейдите в свойства проекта и затем Linker-> Advanced выберите x64 machine. 4. Теперь перестройте решение.
Если все еще вы получаете ту же ошибку. попробуйте чистое решение, а затем перестройте заново и откройте Visual Studio, вы получите список недавно открытых проектов, щелкните правой кнопкой мыши проект и удалите его оттуда. Теперь перейдите к решению и снова откройте решение.
источник
это происходит со мной, когда я конвертирую свое решение VS2008 в VS2010 и меняю конфигурацию win32 на X64, в моем старом решении у меня есть mfcs90d.lib (Configuration-> Linker-> Input-> Дополнительные зависимости), так как я использую VS010, я только что проверил в папке VS2010, где это mfcs100d.lib, поэтому я изменил mfcs90d.lib на mfcs100d.lib в (Configuration-> Linker-> Input-> Дополнительные зависимости), он работал нормально.
источник
Для тех, кто работает с QT Creator, проблема та же (как описано в @ c-johnson). Убедитесь, что настройки компилятора для MSVC в вашем наборе установлены на x86, как показано ниже.
источник
для некоторых использующих командную строку (dos prompt) это может быть полезно:
Также, если вы делаете так:
CL "% 1% 2% 3" / EHsc / link user32.lib Gdi32.lib Winmm.lib comctl32.lib * .obj / SUBSYSTEM: CONSOLE / MACHINE: x86
Вы должны del * .obj раньше ; чтобы не перепутать компоновщик с 64- и 32-битными объектами, оставшимися от предыдущих компиляций?
источник
Много хороших предложений выше.
Также, если вы пытаетесь встроить Win32 в x86:
Убедитесь, что любые библиотеки, на которые вы ссылаетесь в Program Files (x86), на самом деле являются библиотеками x86, потому что они не обязательно ...
Например, файл lib, на который я ссылался в C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Professional \ SDK, выдал эту ошибку, в конце концов я нашел его версию для x86 в C: \ Program Files (x86) \ Windows Kits \ 10 \ Lib \ 10.0.18362.0 \ um \ x86 и все работало нормально.
источник
какая ОС? если это Windows x64, то вам нужно убедиться, что CUDA x64 была установлена и, следовательно, VS2008 должен скомпилировать проект в режиме x64 ...
CUDA будет устанавливать только x64 или x86 в Windows
источник