gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:22 25 4
gpt4 key购买 nike

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

我试图让动态加载的解释器库“libmyint.so”与共享对象库“libmylib.so”中的函数“message_from_library”链接,而不是与链接到我当前拥有的应用程序“myapp”的“libmylib.a”链接。

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.

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

谢谢。

最佳答案

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

关于c++ - 操作动态库加载的符号解析顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24822779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com