情况:
- 静态库LIB1,从源代码编译并链接为lib1.lib(使用/MD)。 使用库LIB2,并在其中包含来自lib2.lib的对象。
- 静态库LIB2也是用/MD编译的。
- EXE间接依赖于这两个库。
在MSVC 15.9.19上链接此EXE的结果:出现很多LNK2005错误,例如:
lib2.lib: error LNK2005: "function <funcsig> already defined in lib1.lib"
我经常会收到类似这样的警告信息:
lib1.lib: warning LNK4099: PDB 'lib2.pdb' was not found with 'lib1.lib' or at '<path>'; linking object as if no debug info
问题: 为什么链接器没有合并重复定义? 我如何诊断这个问题的确切原因?
谢谢!
更新: 错误与标准库无关。它们涉及Google Protobuf函数。LIB2是Google的libprotobuf.lib。LIB1也是Google的OR-Tools库,使用Protobuf。但我们也使用Protobuf,因此出现了冲突!
/NODEFAULTLIB:LIB2
链接器选项会发生什么? - 1201ProgramAlarm