当链接到同一个二进制文件时,不同lib中的相同符号不会重新定义?

时间:2012-05-25 02:22:56

标签: c++ linux gcc

了lib1.a:

#include<stdio.h>
#include<stdlib.h>
class Lib
{
public:
inline static const void Test()
{
printf("this is lib1\n");
};
void Lib1Test()
{
Lib::Test();
}
};

Lib2.a:

#include<stdio.h>
#include<stdlib.h>
class Lib
{
public:
inline static const int Test()
{
printf("this is lib2\n");
};
void Lib2Test()
{
Lib::Test(); // this will call the Test in Lib1,amazing!
}
};

lib1.a和lib2.a将链接在一起进行测试。

是什么原因? Lib :: Test没有重新定义吗?

2 个答案:

答案 0 :(得分:2)

这违反了One Definition Rule,它会使您的程序无效,但不需要实施来诊断它。

答案 1 :(得分:1)

  

没有Lib :: Test重新定义

由于运动已经回答,你的程序格式不正确(违反了一个定义规则)。

要了解其无法链接的原因,请阅读COMDAT部分here