Ошибка ссылки Visual C++ 2017 из-за флага -Ot?

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

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

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

Детали заключаются в том, что из-за внешнего компонента, который мы не можем контролировать (компонент A), этот проект Visual Studio 2017 вынужден использовать версию цепочки инструментов C++ v14.13, то есть не самую последнюю (v14.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 там тоже нет...?


person Carl Colijn    schedule 08.11.2018    source источник
comment
Ot является (и всегда был) параметром компилятора, а не компоновщика. Можете ли вы попробовать установить флаг компоновщика /VERBOSE («показать прогресс» в параметрах), найти вывод для Ot и сказать, откуда он берется?   -  person Ofek Shilon    schedule 16.11.2018
comment
Кажется законным :) Это делает его еще более странным... Мне придется проверить на работе в следующий понедельник.   -  person Carl Colijn    schedule 17.11.2018
comment
Я проверил, но, боюсь, ничего нового не дал... См. добавленный раздел Update моего поста о новых деталях. Но хотя я все еще заинтригован этим, мы решили двигаться дальше и использовать более старую версию Visual Studio (не набор инструментов 14.13 VS2017, а правильный набор инструментов VS2015); это делает эту ошибку спорной (версия их статической библиотеки VS2015 работает хорошо), а также дает нам некоторые дополнительные преимущества обратной совместимости с другими внешними компонентами. Так что большое спасибо за ваши усилия, и я оставлю это на ваше усмотрение, если вы хотите продолжить расследование :)   -  person Carl Colijn    schedule 19.11.2018
comment
Конечно. Что бы это ни стоило, я вижу, что для других переустановка VS решила идентичную проблему: github.com/ xmrig/xmrig/issues/630   -  person Ofek Shilon    schedule 20.11.2018


Ответы (1)


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

проект

--------\

---------lib1(unable to rebuild lib1 until its dependencies were also rebuilt with 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

person Nathan Blackerby    schedule 05.07.2019