Проблема связывания: фатальная ошибка LNK1112: тип модуля модуля "x64" конфликтует с типом целевой машины "X86"
Я пытаюсь запустить пример приложения из библиотеки wxFreeChart. После компиляции при связывании возникает ошибка:
wxcode_msw28d_freechart.lib(wxfreechart_lib_xydataset.obj) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
Я попытался переключить опцию компоновщика \advanced\target на MachineX64, но он не работает.
Im с помощью visual studio 2008, любое предложение?
спасибо за помощь
Ответы
Ответ 1
Ошибка явная, вы пытаетесь связать библиотеки, которые были скомпилированы с разными целями ЦП. Исполняемое изображение может содержать только чистый x86 (32-разрядный) или чистый x64 (64-разрядный) код. Смешивание невозможно.
Вы изменяете целевой ЦП, создавая новую конфигурацию для проекта, но изменить настройку компоновщика недостаточно. Build + Configuration Manager, активная платформа платформы решений в правом верхнем углу, выберите "Создать" и выберите "x64". Это создает новую конфигурацию с несколькими измененными настройками проекта, что наиболее важно для компилятора, который будет использоваться.
Остерегайтесь того, что до VS2010 64-разрядные компиляторы по умолчанию не установлены. Если вы не видите x64 в комбо-платформе, вам необходимо повторно запустить setup.exe и включить параметр для установки 64-разрядных компиляторов. Затем снова запустите любой установщик пакета обновления, который вы, возможно, применили.
Возможный подход с меньшими болевыми точками - использовать 32-битную версию библиотеки.
Ответ 2
Я столкнулся с этим и нашел решение.
Сначала о том, как я попал в эту проблему. У меня есть проект, который строит в x86. Затем я использую Configuration Manager для добавления x64, и я ударил эту проблему.
Внимательно изучая BuildLog.htm, я вижу, что оба из них перечислены как параметры компоновщика:
/MACHINE: X64
/машина: X86
Я не могу найти нигде в диалоговом окне "Страницы свойств", где я могу изменить это, поэтому я открываю файл .vcproj и просматриваю соответствующую строку и меняю ее на: AdditionalOptions = "/STACK: 10000000/машина: x64/debug"
и он работает.
Ответ 3
В моем случае, похоже, это было потому, что у меня были "скопированные настройки" с 32-разрядной до новой конфигурации (64 бит), и она не обновляла библиотеки. Странно.
1 > MSVCRTD.lib(ti_inst.obj): фатальная ошибка LNK1112: тип модуля модуля "конфликты X86 с типом целевой машины" x64
это означало, что "ваши свойства → Каталоги VС++ → Библиотечные каталоги" указывают на каталог с 32-битными библиотеками, встроенными в него. Исправьте как-нибудь!
В моем случае http://social.msdn.microsoft.com/Forums/ar/vcgeneral/thread/c747cd6f-32be-4159-b9d3-d2e33d2bab55
ref: http://betterlogic.com/roger/2012/02/visual-studio-2010-express-64-bit-woe
Ответ 4
Перейдите к свойствам проекта → свойства конфигурации → Библиотекарь
Установите целевую машину на MachineX64 (/MACHINE: X64)
Ответ 5
Попробуйте изменить каждое вхождение. \Release в.\x64\Release в свойствах x64. По крайней мере, это сработало для меня...
Ответ 6
Поскольку проблема связана с различием в спецификации компиляции и целевой машины (x86 и x64) Выполните следующие шаги:
- Откройте проект С++, который вы хотите настроить.
- Выберите кнопку Configuration Manager, чтобы открыть диалоговое окно Configuration Manager.
- В раскрывающемся списке "Платформа Active Solution" выберите параметр, чтобы открыть диалоговое окно "Новая платформа решений".
- В раскрывающемся списке Тип или выберите новую платформу выберите 64-битную платформу.
Это решило мою проблему.
Ответ 7
Я знаю, что это немного устарело, но я подумал, что дам еще один совет.
В моей ситуации я унаследовал это приложение, которое мне пришлось поддерживать.
Проект VS2008 поставляется с той же строкой в C/С++ → OutputFIles → "ObjectFIleName" и "Program Database File Name" (для обеих платформ Win32 и x64).
Поэтому, когда я построил платформу Win32, она построена отлично, но когда я попытался создать x64, я получил ошибку:
\ Debug64\Objects\common.obj: фатальная ошибка LNK1112: тип модуля модуля "X86" конфликтует с типом целевой машины "x64"
Очевидно, что оба patforms сохраняли common.obj в одном месте, поэтому, когда я пытался создать x64, компоновщик взял существующий файл объекта, который был x86.
Чтобы исправить, я просто заменил существующую строку макросом "$ (IntDir) \" для x64 (без кавычек) и удостоверился, что макрос решил правильный путь, как и в остальных проектах.
Это решило мою проблему.
Ответ 8
Обновление для ответов i00g и Thomas, на этот раз для VS2012 (некоторые имена изменены). После копирования настроек x86 в целевую группу x64 с помощью диспетчера конфигурации у вас возникнет проблема по той же причине, что и в предыдущем случае (цели lib не соответствуют настройке x64). Откройте ваш .vcxproj(текстовый редактор) и замените MachineX86 на MachineX64, где это необходимо. (Я все еще не нашел, где это находится на листах свойств....) Это только кажется необходимым для статических libs.
Ответ 9
перед тем, как перейти к шагу "compile -DIPLIB = NONE filename.cxx"
перейдите по пути установки VIsual Studio до командного файла vcvarsall и измените конфигурацию, как показано ниже.
* C:\apps\MVS9\VC\vcvarsall.bat x86_amd64 *
теперь следующим шагом должно быть
compile -64bit -DIPLIB = none filename.cxx
это решило проблему для меня
Ответ 10
Спасибо за ответы ребятам. Моя проблема заключалась в том, что я изменил решение x64 в Visual Studio до 32 бит в Configuration Manager. В итоге я просто создал новое решение как 32 бит, а затем скопировал свой код на С++, и эта ошибка исчезла. Я думаю, что l00g33k и предложения RogerAttrill, возможно, были решением, но моя работа тоже.
Ответ 11
Недавно я столкнулся с этой проблемой. Это потому, что я использовал qt (x64
) в vs win32
. Если вы хотите использовать qt-приложение x64
, вы можете выбрать vs x64
- как указано выше. Если вы хотите использовать win32
, и, возможно, нет, вам нужно загрузить qt (32bit
), а затем правильно настроить среду, например каталог lib
и т.д. (Примечание: возможно, вы устарели установить в x64(other version)
, если вы конвертируете ваш win32 или x64 в другой, Additional Dependencies
включает старый каталог!)
Ответ 12
Эта проблема не имеет ничего общего с компоновщиком, поэтому изменение ее настройки не повлияет на результат. Вы получаете это, потому что я предполагаю, что вы пытаетесь настроить таргетинг на x86, но по той или иной причине wxcode_msw28d_freechart.lib строится как x64 файл.
Попробуйте найти wxcode_msw28d_freechart.lib и любой исходный код, из которого он получен. Ваша проблема здесь. Посмотрите, есть ли какие-то специальные шаги сборки, которые используют неправильный набор инструментов (x64 вместо x86).