C++ 共享库依赖于具有硬编码路径的其他库
我正在构建opencv,但是一些so库包含对其他共享库的依赖,这些共享库的名称包含路径元素C++ 共享库依赖于具有硬编码路径的其他库,c++,opencv,shared-libraries,C++,Opencv,Shared Libraries,我正在构建opencv,但是一些so库包含对其他共享库的依赖,这些共享库的名称包含路径元素。/../lib,这将导致库在运行时加载失败 我试图更改构建选项,并在网上搜索以了解问题是如何发生的,但找不到答案 这些.so文件中如何包含这些路径元素,以及如何排除它们 例如,下面显示了一个库libopencv\u-calibd3d.so依赖于。/../lib/libopencv\u特性2d.so。我希望从命令的输出中删除那些。/../lib/: ~sample/opencv/test$ objdump
。/../lib
,这将导致库在运行时加载失败
我试图更改构建选项,并在网上搜索以了解问题是如何发生的,但找不到答案
这些.so文件中如何包含这些路径元素,以及如何排除它们
例如,下面显示了一个库libopencv\u-calibd3d.so
依赖于。/../lib/libopencv\u特性2d.so
。我希望从命令的输出中删除那些。/../lib/
:
~sample/opencv/test$ objdump -p libopencv_calib3d.so | grep NEEDED
NEEDED ../../lib/libopencv_features2d.so
NEEDED ../../lib/libopencv_flann.so
NEEDED ../../lib/libopencv_highgui.so
NEEDED ../../lib/libopencv_imgproc.so
NEEDED ../../lib/libopencv_core.so
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libgcc_s.so.1
NEEDED libc.so.6
根据对的读取,有两种方法可以对路径进行编码:
- 使用
。无论如何,你需要删除这个李>-Wl,-rpath….
- 使用like
链接if“~/deps/A/lib/libA.so”
没有libA.so
。您需要将SONAME
设置为SONAME
李>libA.so