Ошибка ссылки Visual C ++ 2017 из-за флага -Ot? - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь связать проект Visual Studio 2017, но застрял при следующей ошибке компоновщика:

LINK : fatal error C1007: unrecognized flag '-Ot' in 'p2'

Я прочитал вопросы о том, что может быть причиной, но я не смог найти решение для моего проекта.

Подробности в том, что из-за внешнего компонента, который мы не можем контролировать (компонент A), этот проект Visual Studio 2017 вынужден использовать версию набора инструментов C ++ версии 14.13, то есть не самую последнюю версию (версия 14). 14). Однако последний выпуск другой внешней предварительно скомпилированной статической библиотеки, над которой мы также не имеем никакого контроля (компонент B), построен с версией v14.14 (я проверил с помощью выдержки из дампбина отладочной версии библиотеки). Переключение моего проекта на набор инструментов v14.14 действительно устраняет ошибку ссылки на компоненте B, но это, к сожалению, не является решением для меня из-за компонента A. Также нежелательно использовать более раннюю версию компонента B, так как нам нужен функционал в последней версии ...

Однако, что меня поражает, так это то, что флаг / Ot («оптимизировать по скорости») существует со средних веков ... Почему v14.13 его не распознает? Или это просто (неуклюже проявленный) вопрос несоответствующего расположения файла obj из-за различий в версиях? И, вероятно, связано, что означает «p2» в любом случае?

Обновление

Я проверил вывод компоновщика с помощью флага / verbose, и все кажется нормальным (3600 строк Searching <lib>, Found <function>, Referenced in <obj> и Loaded <lib>).

До самого конца, где я получаю следующие 6 строк:

1>    Searching C:\PathToExternalLib\TheirStatic.lib:
1>      Found UsedFunctionName
1>        Referenced in MyOwnStatic.lib(MyOwnCompileUnit.obj)
1>LINK : fatal error C1007: unrecognized flag '-Ot' in 'p2'
1>LINK : fatal error LNK1257: code generation failed
1>Done building project "MyProject.vcxproj" -- FAILED.

И это все.

При посещении настройки command line свойств ссылок проекта, единственное перечисленное (для удобства разбито на отдельные строки):

/OUT:"MyProject.dll"
/MANIFEST
/NXCOMPAT
/PDB:"MyProject.pdb"
/DYNAMICBASE "C:\PathToMyStatic.lib"
/IMPLIB:"MyProject.lib"
/DLL
/MACHINE:X64
/PGD:"MyProject.pgd"
/MANIFESTUAC:"level='asInvoker' uiAccess='false'"
/ManifestFile:"MyProject.prm.intermediate.manifest"
/ERRORREPORT:PROMPT
/NOLOGO
/LIBPATH:"C:\PathToExternalStaticLib"
/LIBPATH:"C:\PathToAnotherExternalStaticLib"
/TLBID:1 

Так что никаких следов -Ot флага там тоже нет ...?

1 Ответ

0 голосов
/ 05 июля 2019

У меня была эта проблема. ССЫЛКА: фатальная ошибка C1007: нераспознанный флаг '-Ot' в 'p2' при создании проекта с Visual Studio 2015. Мне пришлось перестраивать любую библиотеку или вспомогательную библиотеку, с которой связан проект, который был построен с помощью Visual Studio 2017. Как только я перестроил зависимые библиотеки с помощью Visual Studio 2015, первый проект смог связать их.

Проект

-------- \ --------- lib1 (невозможно перестроить lib1, пока его зависимости не были перестроены с VS2015 -------------- \ lib_linked_by_lib1_which_was_build_with_VS2017_and_had_to_be_rebuilt -------------- \ another_lib_which_had_to_be_rebuilt_for_lib1_with_VS2015

-------- \ lib2

-------- \ lib3
...