在运行时加载动态库时,我试图操纵(或至少更好地理解)符号解析顺序。在我的例子中,我在Linux操作系统上使用dlopen。
我正在尝试使用动态加载的解释器库“libmyint.so”来链接共享对象库“libmylib.so”中的函数“message_from_library”,而不是链接到“libmylib.a”的“libmylib.a”应用程序“myapp”就是我现在拥有的。
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.
我希望有人能告诉我如何在这个例子中获得所需的输出。
感谢。
答案 0 :(得分:0)
动态库用于在运行时解析未解析的引用。在链接时已经解决的任何事情都不会产生未解决的引用。无论您的动态链接器尝试了什么,如果没有未解析的引用Foo
,那么它根本无法解决该问题。