我正在尝试链接一个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标志检查了链接器输出,并且一切似乎都很正常(Searching <lib>
,Found <function>
,Referenced in <obj>
和Loaded <lib>
的3600行)。
一直到最后,我得到以下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
标志的踪影...?
答案 0 :(得分:0)
我遇到了这个问题。链接:致命错误C1007:'p2'中无法识别的标志'-Ot' 同时使用Visual Studio 2015构建项目。 我必须重建与使用Visual Studio 2017构建的项目链接的任何库或子库。 当我使用Visual Studio 2015重建依赖库后,第一个项目便可以对其进行链接。
项目
-------- \--------- lib1(在使用VS2015
也重建其依赖项之前,无法重建lib1 -------------- \ 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