静态库接口中未公开的类的名称冲突(c ++)

时间:2017-10-18 13:40:34

标签: c++ visual-studio-2017 static-libraries

我有两个静态库(a.libb.lib) 在内部,库a具有类Foo,但它不会在任何公开可用的包含中公开。库b.lib也有类Foo,它也不会在界面中公开。这些类位于同一名称空间中,并具有相同的构造函数签名。

当我调试或运行可执行文件(使用两个库)时,我发现创建了lib a而不是lib b的错误类。 试图了解这是如何发生的。这是链接器问题吗? (即类名相同,链接器插入它先找到的任何内容)

1 个答案:

答案 0 :(得分:5)

静态库很少比目标文件的档案更多。与静态库链接时,它与链接单独的目标文件相同。目标文件基本上是单个translation unit。由于the One Definition Rule,您不能在具有相同名称的不同翻译单元中使用两个不同的类,因为这将导致undefined behavior

如果你想拥有"私人"库中的类,使用名称空间并定义" private" (唯一命名的)命名空间内的类。