Ошибка C1047: объектный файл создан с более старым компилятором, чем другие объекты - PullRequest
27 голосов
/ 08 мая 2009

У меня есть проект, который я создаю на C ++ в режиме выпуска в Visual Studio 2008 с пакетом обновления 1 (SP1) для Windows 7, и когда я его собираю, я получаю:

фатальная ошибка C1047: объект или файл библиотеки '. \ Release \ foobar.obj' был создан со старым компилятором чем другие объекты; восстановить старое объекты и библиотеки.

Ошибка при связывании.

Я пытался удалить конкретный объектный файл и перестроить, но это не исправило. Я также пытался удалить всю папку сборки релиза и перестроить, но это также не помогло. Есть идеи?

Ответы [ 11 ]

16 голосов
/ 02 июля 2013

У меня была эта проблема, но мое решение отличается:

Для меня виновником было то, что включенная внешняя библиотека была скомпилирована с

/GL (=Enable link-time code generation under
      C/C++/ Optimization / Whole Program Optimization) 

с использованием более старой визуальной студии (2005). Я перестроил указанную библиотеку в 2005 году без / GL, а ошибка компоновщика исчезла в 2008 году. Поскольку MSDN заявляет, что это связано с параметром / LTCG, это устанавливается автоматически с помощью флага / GL: http://msdn.microsoft.com/en-us/library/ms173554%28v=vs.80%29.aspx

11 голосов
/ 10 мая 2009

Я бы предложил переустановить VS 2008 SP1. Вы установили другую VS (например, VS Express) в то же время? Известно, что это создает помехи для существующей установки VS.

Вы можете попробовать проверить версии компилятора и компоновщика, запустив cl.exe и link.exe из командной строки Visual Studio.

7 голосов
/ 18 августа 2013

Два способа:

1. Обновление до Sp1 для сборки библиотеки

2.Пожалуйста, проверьте свою сборку, чтобы убедиться, что Оптимизация всей программы отключена. Для статического проекта lib перейдите на страницу свойств и измените «Свойства конфигурации-> C / C ++ -> Оптимизация-> Оптимизация всей программы» на «Нет».

3 голосов
/ 12 сентября 2012

Любой, кто нашел этот поток, ищет ответы ... Я тоже столкнулся с этим, но это была не проблема SP1, не проблема восстановления или проблема PCH ... в итоге это была библиотека, созданная с Более поздняя версия VS пытается подключиться к проекту на более старой VS. Хотя это звучит очевидно, странным было то, что VS2008 сообщал, что объект, который скомпилировал , был причиной проблемы, которая привела меня в погоню за диким гусем ...

2 голосов
/ 08 мая 2018

Мне удалось исправить эту проблему в VS 2015 с помощью следующих шагов.

[1] (не уверен, что это было необходимо) Выключите / GL во всех компонентах

C / C ++> Оптимизация> Оптимизация всей программы> Нет

В файлах .VCXPROJ это:

<WholeProgramOptimization>false</WholeProgramOptimization>

Выключить / LTCG

Библиотекарь> Общие> Генерация временного кода связи

<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>  

[2] Более важный шаг, убедитесь, что все компоненты рисуются из одинаковых каталогов. Мой основной EXE-файл использовал:

Release Include
$(WindowsSdkDir)include\um;$(WindowsSdkDir)include\shared;$(UniversalCRT_IncludePath);$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include
Release Library
$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);

.lib использовал разные каталоги (неправильно):

Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86

Я изменил каталоги .lib так, чтобы они совпадали с .exe, и ошибка компиляции исчезла.

1 голос
/ 28 октября 2015

Возможно также, что библиотека-нарушитель была построена с другим параметром "Набор инструментов платформы" (в Свойствах проекта-> Общие).

1 голос
/ 03 февраля 2011

У меня тоже была такая же проблема, и мой визуальный блок Studio About сообщил, что у меня установлен SP1. Видимо, это было не совсем так. Расследование моего конкретного появления этой проблемы показало, что компилятор ресурсов, похоже, был виновником. Это была более старая версия, которая вызвала упомянутое сообщение об ошибке. Мои установленные исправления (обновление Windows) не решили эту проблему. Может быть, я пропустил важный .....

Надеюсь, мы когда-нибудь переживем тот день, когда разработчики действительно сообщат о реальной проблеме в своих сгенерированных сообщениях об ошибках. :-) «старая версия компилятора ....», ребята, вы можете сделать это лучше; -)

В любом случае, вот ссылка для скачивания последней версии SP1 для VS2008, которую я использовал для решения этой проблемы.

http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en

Удачного кодирования.

0 голосов
/ 08 ноября 2018

Я пробую все здесь ... и моя ошибка стала неверной ссылкой и дубликатом GUID (между проектом 2010 и 2015 ... чертовски копируемый / прошлый проект)

Во время миграции проекта с VS2008 на 2010 и 2015 годы. Мы сохраняем все версии проекта XXX.vxproj (для VS2010) и XXX_2015.vxproj (для VS2015).

И в одном из них в решении 2015 года мы получили ссылку на проект 2010 года!

Поэтому проверьте ССЫЛКУ ... и никогда не дублируйте GUID.

0 голосов
/ 02 ноября 2015

Применительно к MSDN эта ошибка Файл объекта или библиотеки 'file' был создан с более старым компилятором, чем другие объекты; восстановить старые объекты и библиотеки возникает, когда объектные файлы или библиотеки, созданные с помощью / LTCG, связаны между собой, но когда эти объектные файлы или библиотеки создаются с использованием различных версий набора инструментов Visual C ++.
Это может произойти, если вы начинаете использовать новую версию компилятора, но не выполняете чистую перестройку существующих объектных файлов или библиотек.
Для разрешения перестройте все объектные файлы или библиотеки.

0 голосов
/ 28 октября 2010

У меня была такая же проблема, но прямая переустановка не устранила ее. Я использовал найденную здесь версию

https://www.dreamspark.com/Products/Product.aspx?ProductId=9

Однако после траления на форумах я обнаружил, что установка VS2008 SP1 Express устраняет эту проблему. , , .

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=f3fbb04e-92c2-4701-b4ba-92e26e408569

Вы должны быть осторожны, из какого места вы загружаете VS2008, поскольку для загрузки доступны разные версии одного и того же продукта Express.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...