Visual Studio解决方案,具有相同名称功能的不同项目

时间:2013-05-21 19:59:10

标签: c++ visual-studio-2010 linker

我有一个VS10解决方案,其中包含2个具有相同名称功能的项目。链接器抱怨(抛出警告)关于被忽略的第二个定义(同名的两个函数):

warning LNK4006: "void __cdecl function_name(short *,class Bbox *,int,int,struct FILE_NAMES *,unsigned char *)" (?function_name@@YAXPAFPAVBbox@@HHPAUFILE_NAMES@@PAE@Z) already defined in XXX.lib(segment.obj); second definition ignored

这会导致对第二个项目(被忽略的项目)的函数的调用指向第一个项目的功能(因为忽略了定义)。

我的问题是:有没有办法避免/解决这个问题,除了重命名两个项目中具有相同名称的所有功能?例如,通过向我的头文件添加#if / pragma,或者通过操作.obj文件。实际情况是,解决方案只需要任何编译中的两个项目中的一个,因此条件编译的简单方法非常好,但我首选的是将两个项目编译在一起。

1 个答案:

答案 0 :(得分:1)

这违反了One Definition Rule,该{{3}}表示只有一个定义的tempate,type,function或object可能存在于整个程序中。要解决此问题,要么使两个函数的签名都按名称或参数重载进行唯一,将它们放在不同的名称空间中,或者如果同时需要两个库,则使用条件编译。