操纵动态库加载的符号解析顺序
Manipulating the symbol resolution order for dynamic library loading
我试图在运行时加载动态库时操纵(或至少更好地理解)符号解析顺序。在我的例子中,我在Linux操作系统上使用dlopen。
我正在尝试获得动态加载的解释器库"libmyint"。因此,链接到共享对象库"libmylib"中的函数"message_from_library"。而不是"libmylib"。这是链接到应用程序"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.
我希望有人能告诉我如何在这个例子中得到所需的输出。
谢谢。
动态库用于在运行时解析未解析的引用。任何在链接时已经解析的内容都不会产生未解析的引用。无论你的动态链接器尝试什么,如果没有未解析的引用Foo
,那么它根本无法解析。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 数到第n个楼梯的路(顺序无关紧要)
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 优先顺序:智能指针和类析构函数
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 无符号 int 和双转换顺序
- 不同库中的相同符号和链接顺序
- 如何在不改变顺序的情况下将int64值移位到无符号int64空间
- 将范围有限的浮点数转换为无符号的整数,以保持排序顺序和精度
- 模板类C++符号范围搜索顺序不同
- EM_EXGETSEL与文本选择顺序无关.如何确定一段选定文本中的插入符号位置
- 多定义符号的C/ c++链接器顺序
- 操纵动态库加载的符号解析顺序