фатальная ошибка LNK1112: тип компьютера модуля 'X86' конфликтует с типом машины назначения 'AMD64' - PullRequest
3 голосов
/ 01 апреля 2010

Я использую VS 2003 .Net на 32-битной ОС XP. Я также установил «Microsoft Platform SDK» на моей машине. Могу ли я создать приложение (двоичные файлы) для vc ++, предназначенное для 64-битных ОС?

Я использую следующие параметры проекта:

    Name="VCLinkerTool"
    AdditionalOptions="/machine:AMD64 bufferoverflowU.lib"
    OutputFile="\bin\Release\MM64.dll"
    LinkIncremental="1"
    SuppressStartupBanner="TRUE"
    AdditionalLibraryDirectories=""C:\Program Files\Microsoft Platform SDK\Lib\AMD64""
    GenerateDebugInformation="TRUE"
    ProgramDatabaseFile="\bin\Release\MM64.pdb"
    GenerateMapFile="TRUE"
    MapFileName="\bin\Release\MM64.map"
    MapExports="TRUE"
    MapLines="TRUE"
    OptimizeReferences="2"
    EnableCOMDATFolding="2"
    ImportLibrary=".\Release/MM64.lib"
    TargetMachine="0"/>

Я получаю следующую ошибку:

fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'

Нужно ли мне собирать проект на 64-битной ОС или мне нужно изменить настройки проекта, чтобы устранить эту ошибку. Пожалуйста, помогите мне решить эту проблему.

Ответы [ 5 ]

9 голосов
/ 04 апреля 2010

У меня была такая же проблема сегодня, вот как я ее решил (в Visual Studio 2008): Пошел в Свойства проекта -> Линкер -> Командная строка -> Дополнительные параметры и удалил / MACHINE: I386 из дополнительных параметров компоновщика.

Надеюсь, это поможет

2 голосов
/ 12 сентября 2013

Для 64-битных пользователей Windows:

У меня была такая же проблема сегодня, вот как я ее решил (в Visual Studio 2008): я перешел к:

Project Properties -> Linker -> Command Line -> Additional Options

и добавлены /MACHINE:I364 из компоновщика дополнительных опций.

Это сработало для меня.

2 голосов
/ 23 августа 2011

Наличие той же проблемы в VS2008. Мое решение состояло в том, чтобы изменить платформу активного решения, расположенную в Build-> Configuration Manager, и создать новую платформу решения, используя x64 и копируя настройки из Win32. Это позволило мне использовать предустановленные 32-битные библиотеки в моей 64-битной ОС.

1 голос
/ 07 декабря 2017

Я столкнулся с вышеуказанной ошибкой, когда попытался создать свою пользовательскую библиотеку для ARM64 в Visual Studio 2017. И моей целевой машиной уже был ARM64, как и ожидалось.

Очевидно, проблема была в компиляторе ARM64, который не был установлен (хотя я мог запустить сборку в ARM64). Я установил его, запустив установщик Visual Studio Individual Components -> Visual C++ compiler and libraries for ARM64

Далее я получил error MSB8022: Compiling Desktop applications for the ARM platform is not supported.
Это было решено добавлением

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
  ...
  <PlatformToolset>v141</PlatformToolset>
  <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>

в файл моего проекта. После всего вышеперечисленного я смог успешно построить свой проект в ARM64.

Надеюсь, это будет полезно.

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

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

SOME_KIND_OF_OBJECT.obj: fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'

Вы посмотрите на имя файла obj, и вы найдете там корень вашей проблемы. Независимо от того, какой объект указан в списке, он будет иметь некий аналог исходного кода с тем же именем. Посмотрите на него и посмотрите, как он компилируется. Обычно все это автоматизируется в VS, но иногда есть специальные шаги сборки, которые были добавлены разработчиком. Проверьте пользовательские события до и после сборки, чтобы увидеть, используется ли инструмент x86 для его сборки. Таблица свойств в VS2010 + будет относиться к obj и платформе, поэтому вы можете проверить используемые каталоги библиотек, чтобы убедиться, что они не 32-битные.

...