Visual Studio - Поиск модулей, вызывающих C1905 (несовместимость процессора) - PullRequest
11 голосов
/ 20 августа 2010

Я пытаюсь создать x64-сборку проекта с помощью Visual Studio 2005. В настоящее время происходит сбой с ошибкой компоновщика C1905, «Внешний интерфейс и внутренний интерфейс несовместимы (должен быть ориентирован на один и тот же процессор).»

Из того, что я понял, по сути, это говорит о том, что моя сборка x64 пытается соединиться с модулями x86. К сожалению, этот проект связан с множеством различных библиотек. Я не уверен, кто является причиной проблемы.

Есть ли способ получить больше информации из Visual Studio?

Ответы [ 2 ]

11 голосов
/ 20 августа 2010

Сначала проверьте Configuration Manager (Build> Configuration Manager ...), чтобы убедиться, что вы строите все свои проекты для одной и той же платформы.

Если это не помогает, то из VisualКомандная строка Studio (доступна из меню «Пуск») позволяет использовать dumpbin для определения архитектуры файлов .lib и .obj, выполнив следующие действия:

C:\Foo> dumpbin /headers Foo.lib | more
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file Foo.lib

File Type: LIBRARY

FILE HEADER VALUES
             14C machine (x86)
               3 number of sections
        4C6CB9B6 time date stamp Wed Aug 18 21:57:26 2010
             113 file pointer to symbol table
               8 number of symbols
               0 size of optional header
             100 characteristics
                   32 bit word machine

Первая строка под значениями заголовкаговорит вам, для какой архитектуры был скомпилирован .lib / .obj (в данном случае x86).

Если у вас много связанных промежуточных продуктов, вы можете немного автоматизировать это, просто найдя x86 (или x64)) файлы:

for /R %f in (*.obj *.lib) do @echo %f && dumpbin /headers %f | findstr /c:"machine (x86)"

5 голосов
/ 31 октября 2011

Другая причина - флаги компиляции. Если некоторые из них не настроены для оптимизации всей программы, а другие нет, то вы также получите эту ошибку. В VS есть две такие настройки - одна на общем уровне и одна на C ++ / Optimization. В библиотеках, выпущенных более старыми версиями VS, этот набор отсутствовал. У тех, которые произведены более новыми версиями VS, это установлено.

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

...