Подтвердить что ты не робот

Проблема связывания: фатальная ошибка 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, любое предложение?

спасибо за помощь

4b9b3361

Ответ 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).