我正在尝试获得一个Visual 2017项目链接,但我被以下链接器错误所困:
LINK : fatal error C1007: unrecognized flag '-Ot' in 'p2'
我读过关于原因的问题,但我无法为我的项目找到解决方案。
详细信息是,由于外部组件我们无法控制(组件A),此Visual 2017项目被迫使用C++工具链的v14.13版本,即不是最新版本(v14.14)。但是,另一个我们无法控制的外部预编译静态库(组件B)的最新版本是用v14.14版本构建的(我通过库的调试版本的dumpbin解压缩进行了检查)。将我的项目切换到v14.14工具链确实会使组件B上的链接错误消失,但不幸的是,这对我来说不是一个解决方案,因为组件A。采用组件B的早期版本也是不可取的,因为我们需要最新版本中的功能.
然而,令我印象深刻的是,/Ot (“速度优化”)标志从中世纪就开始出现了.为什么14.13不认识它?还是因为版本差异而导致一个不匹配的obj文件布局的问题(表现得很尴尬)?而且,可能相关的是,“p2”到底代表什么?
更新
我使用/verbose标志检查了链接器输出,这一切看起来都很正常(3600行 Searching <lib> 、 Found <function> 、 Referenced in <obj> 和 Loaded <lib> )。
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 设置时,列出的唯一内容是(为了方便起见,将其分成单独的行):
command line
/OUT:"MyProject.dll" /MANIFEST /NXCOMPAT /PDB:"MyProject.pdb" /DYNAMICBASE "C:\PathToMyStatic.lib" /IMPLIB:"MyProject.lib" /MACHINE:X64 /PGD:"MyProject.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'"