想象一下,我们有两个静态库,它们是用 std::vector
的不同实现构建的。这两个二进制文件都有 push_back
和 pop_back
的代码(因为 vector 通常只是 header )。当我们试图在一个项目中同时使用这两个库时,链接器会做什么。它会报错吗?链接器是否可以删除这些方法中每一种方法的一个实现,以便可以进行以下操作:
push_back
来自第二个库的调用调用来自第一个库的push_back
实现
pop_back
从第一个库调用从第二个库调用 pop_back
实现
最佳答案
会报错吗?取决于您如何定义“错误”。
它可能不会在链接时给您一个错误。但它肯定会破坏你的可执行文件。链接器假定,当它遇到一个符号的多个定义时,它们是相同的,因此除了其中一个之外的所有定义都可以被丢弃。如果它们不相同,那么你就违反了单一定义规则,这意味着你正在进入未定义的行为领域。任何事情都可能发生。您很可能会看到随机崩溃。
关于c++ - 两个静态库,两个不同的 vector 实现,链接器会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948204/