当共享库位置在编译和运行时之间更改时,如何解析共享库位置?
How to resolve shared library location when it changes between compile & run time?
我有以下内容:
g++ $(LD_OPTS) -o lib/foo.so lib/bar.o lib/qaz.o ../path/to/foodependency.so
它和foo
都在这里被构建(假设之前的makefile已经构建了foodependency)。在构建过程中,最终结果看起来像这样:
project
---libFoo
------lib
---------foo.so
---libFooDependency
------lib
---------foodependency.so
然而,在运行时,两个foo。还有食物依赖。所以都在同一个目录下,bar
:
bar
---foo.so
---foodependency.so
运行时不能更改此布局。但现在作为结果,ldd foo.so
返回以下内容:../path/to/foodependency.so => not found
如何解决这个差异?
如何解决这个问题
有几种方法。
- 将
foodependency.so
重命名为libfoodependency.so
,链接时使用-L../path/to -lfoodependency
,或者 - 链接时使用
-L../path/to -l:foodependency.so
或 - 当链接
foodependency.so
时,添加-Wl,--soname=foodependency.so
并使用原始链接行。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 写入位置0x0000000C时发生访问冲突
- 在cuda线程之间共享大量常量数据
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 将静态库链接到不带-fPIC的共享库中
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- CUDA:来自不同翘曲但相同块的 2 个线程尝试写入相同的共享内存位置:危险?
- 如何查找C++ isfinite() 在共享库中解析的位置
- 如何判断共享库在进程地址空间中的加载位置
- 当共享库位置在编译和运行时之间更改时,如何解析共享库位置?
- Qt QSharedMemory如何更新共享内存位置
- 共享对象文件的放置位置