【发布时间】:2017-02-19 17:07:56
【问题描述】:
我有一个共享库A.so。其中定义了一个函数foo()。这个foo() 函数依赖于共享库libnl-1.so。关系如下:
A.so
{
foo() => libnl-1
}
我有一个程序app。它调用两个函数,foo() 和 bar()。 bar() 需要另一个版本的 libnl,libnl-3。关系如下:
app {
foo()
bar() => libnl-3
}
我使用cc -o app -lnl-3 -lA 编译了应用程序。但我发现我的应用程序总是崩溃。似乎foo() 正在调用 libnl-3 而不是 libnl-1 (我不知道如何验证这一点)。谁能帮我吗?如果我想这样做,我该怎么办?更改链接顺序?
【问题讨论】:
-
您可以使用
$ LD_DEBUG=all ./app来检查动态链接器从何处将符号导入您的程序。 -
为什么你认为同时链接一个库的两个版本是个好主意?你真的需要重新考虑你在做什么,以便只使用一个版本的库,最好是最新的。
-
为什么stackoverflow.com/questions/228117/… 的答案对您的情况没有用处? (我在这里假设您不能只 C&P 库中需要的两个函数,因为它们是封闭源代码或其他)
标签: c shared-libraries dynamic-linking