如何知道一个共享库是否取决于另一个共享库
How to know if one shared library depends on another shared library or not?
我写了一个共享库,名为" libmyssl.so",我在代码中使用了一些openssl函数,make file看起来如下:
g -v -v -shared -lz -lssl -lcrypto -wl,-soname,libmyssl.so.1,-o libmyssl.so.1.0 myssl.o
之后,我使用 ldd 命令查看是否取决于 libssl.so :
ldd libmyssl.so.1.0
结果如下:
linux-vdso.so.1 => (0x00007fff743fe000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0bc963b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0bc9276000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0bc8f6f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0bc9ea0000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0bc8d59000)
看来它不取决于 libssl.so ,我对吗?
但是,我使用 readelf -s 命令查看符号如下:
readelf -s libmyssl.so.1.0
可爱的如下:
......
259: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND SSL_new
260: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND SSL_get_shutdown
261: 0000000000000000 0 FUNC GLOBAL DEFAULT UND close@GLIBC_2.2.5 (4)
262: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND d2i_X509
263: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND X509_get_pubkey
264: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND SSL_set_info_callback
265: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gmtime_r@GLIBC_2.2.5 (4)
......
看来 X509_Get_putkey 未重新定位。因此,它应该取决于 libssl.so 。也许我不太了解。
希望有人可以对此进行更多的解释,非常感谢!
某些发行版将要求您在引用它们的对象文件之后列出链接的库(模仿静态LIB的工作方式)。因此,尝试构建:
g++ -v -shared -Wl,-soname,libmyssl.so.1,-o libmyssl.so.1.0 myssl.o -lz -lssl -lcrypto
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 共享内存的升压容器是否实现锁定?
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 是否可以使用升压windows_shared_memory共享矢量?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 使用共享 lLibrary 是否需要来自不同lua_State?
- 在新作用域中使用unique_lock是否等效于在使用共享资源的工作结束时解锁调用
- 图问题:找出两个节点是否在每个节点的O(1)时间和O(2)存储中共享同一分支
- 在这种特殊情况下,我是否需要在共享内存中使用原子类型
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 在创建共享库时,是否可以明确地排除某些类
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- OpenMP:当我按线程 ID 访问共享变量时,我是否需要一个关键部分
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 是否有更好的方法来封装成员对象可以访问的共享存储池?