c++ - 当 ld 链接同一个库的不同版本时会发生什么

标签 c++ shared-libraries ld

假设我有 1.1 和 1.2 版的 libA.so,它们都定义了相同的符号。

如果 myApp 需要来自 libA 的符号但错误地链接了两个版本,会发生什么:

ld -o myApp -Lpath -lA_1_1 -lA_1_2

我说得对吗,只要它能找到它,它就会使用第一个符号中的符号?

最佳答案

Am I right it will use symbols from the first one as long as it can find it?

是的,一般来说。这可能不是您想要的。

如果 libA_1_2 中的函数 foo() 调用库中的另一个公共(public)函数 bar(),那么它将使用符号来自 libA_1_1,这可能会做错事(例如,如果库的 v1.2 已更改,以便 foo() 需要 bar() 释放一些内存,但 bar() 的 v1.1 版本不这样做)。

关于c++ - 当 ld 链接同一个库的不同版本时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30750333/

相关文章:

c++ - 在 Qt Creator 中使用 C++11

c++ - 二叉树 - 根据级别打印元素

c++ - 当对象是类成员时,QFile 初始化/赋值操作问题

c - 如何从 FILE* 写入 fd?

在 clang 中编译而不是 gcc?

c - 使用 DT_FILTER 从 DSO 隐藏符号

c - 一步一步的C编译导致segfault

c++ - 一个解决方案,两个项目 : how to call a console project from a windows application? C++

c++ - 如何将 C++ dll 文件加载到 Matlab 中

c - 构建共享对象库 : ldd does not show specified name