VS2015编译:warning LNK4042错误

手册/FAQ (566) 2016-04-23 09:41:55

 

一个工程很大,需要很多的文件。

如果都是我们自己写的文件,我们一般不会把实现不同功能的两个文件命以相同的名称。

但是,如果我们引入了第三方库的源码,这样就很有可能有相同名字的文件存在。

比如很多库都喜欢定义一个base.h文件用于放置一些最基本的东西。

这个时候,如果你的目录包含的不是很清晰的时候,你的编译器就会出现警告: 
warning LNK4042: 对象被多次指定;已忽略多余的指定

我们暂且不说Google style把警告当错误看待。

你以为你可以忽略这个警告,那是打错特错的。

举个例子,你自己定义一个file.cc文件,里面实现了一些函数方法,比如你写了一个函数获取文件的路径:GetFilePath();

这个时候,你引入了一个第三方库,而且为了方便调试,你引入了源码。而这个库也包含一个名为file.cc的文件。

这个时候,build的时候,出现了上面的警告。

再编译你自己写的file.cc的时候就会出现错误了: 
error LNK2001: 无法解析的外部符号

为什么? 
就是因为这个警告,忽略了多余的指定。

解决方案: 
项目上 右键 -> 属性 -> C/C++ -> 输出文件 -> 对象文件名 改为: 
$(IntDir)/%(RelativeDir)/ 

THE END