c++ - 两个静态库,两个不同的 vector 实现,链接器会做什么?

标签 c++ stl linker

想象一下,我们有两个静态库,它们是用 std::vector 的不同实现构建的。这两个二进制文件都有 push_backpop_back 的代码(因为 vector 通常只是 header )。当我们试图在一个项目中同时使用这两个库时,链接器会做什么。它会报错吗?链接器是否可以删除这些方法中每一种方法的一个实现,以便可以进行以下操作:

push_back 来自第二个库的调用调用来自第一个库的push_back 实现

pop_back 从第一个库调用从第二个库调用 pop_back 实现

最佳答案

会报错吗?取决于您如何定义“错误”。

它可能不会在链接时给您一个错误。但它肯定会破坏你的可执行文件。链接器假定,当它遇到一个符号的多个定义时,它们是相同的,因此除了其中一个之外的所有定义都可以被丢弃。如果它们不相同,那么你就违反了单一定义规则,这意味着你正在进入未定义的行为领域。任何事情都可能发生。您很可能会看到随机崩溃。

关于c++ - 两个静态库,两个不同的 vector 实现,链接器会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948204/

相关文章:

c - 将编译时信息嵌入到二进制文件中

c++ - 如何在QTabWidget Qt中展开标签页

c++ - 确定是否传递了类型的宏

c++ - 为什么 range::unique_copy 不能与 std::ostream_iterator 一起使用?

c++ - 有没有办法限制 STL Map 的大小?

c++ - C++中如何从map的迭代器中调用类成员函数?

CMake 静态库依赖项不随 ExternalProject_Add 传播

c++ - 使用简单的 CRITICAL_SECTION,似乎陷入僵局

c++ - 如何在 C++ 中构建和使用 vector(map(pair(struct)))?

gcc - 使用gnueabihf为ARMv6构建