操作动态库加载的符号解析顺序

时间:2014-07-18 10:25:02

标签: c++ linux

在运行时加载动态库时,我试图操纵(或至少更好地理解)符号解析顺序。在我的例子中,我在Linux操作系统上使用dlopen。

我正在尝试使用动态加载的解释器库“libmyint.so”来链接共享对象库“libmylib.so”中的函数“message_from_library”,而不是链接到“libmylib.a”的“libmylib.a”应用程序“myapp”就是我现在拥有的。

code.tar.gz

1包含一个简单示例的存档,可以更好地理解这一点。以下是有关如何构建示例并运行它的说明。

构建说明:

tar xzf code.tar.gz
mkdir app-build int-build lib-build
cd lib-build
cmake ../lib
make
cd ../int-build
cmake ../int
make
cd ../app-build
cmake ../app
make

./myapp

实际输出:

Call to statically linked interpreter function.
This message is from a static interpreter library object.
This message is from a static library object.
Call to dynamically loaded function in interpreter library.
This message is from a *shared* interpreter library object.
This message is from a static library object.

期望的输出:

Call to statically linked interpreter function.
This message is from a static interpreter library object.
This message is from a static library object.
Call to dynamically loaded function in interpreter library.
This message is from a *shared* interpreter library object.
This message is from a *shared* library object.

我希望有人能告诉我如何在这个例子中获得所需的输出。

感谢。

1 个答案:

答案 0 :(得分:0)

动态库用于在运行时解析未解析的引用。在链接时已经解决的任何事情都不会产生未解决的引用。无论您的动态链接器尝试了什么,如果没有未解析的引用Foo,那么它根本无法解决该问题。