我正在构建opencv但是其中一些库包含对其他共享库的依赖关系,这些共享库的名称包含路径元素../../lib
,这会导致加载库在运行时失败。
我尝试更改构建选项并在线搜索以了解问题是如何发生但无法找到答案。
这些路径元素如何包含在那些.so文件中,以及如何排除它们?
例如,下面显示了一个库libopencv_calibd3d.so
取决于../../lib/libopencv_features2d.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
答案 0 :(得分:1)
根据another question for shared library without hardcoding full dependency path的读数,有两种方法可以对路径进行编码:
-Wl,-rpath....
。不知何故,你需要删除它。 "~/deps/A/lib/libA.so"
没有libA.so
,请使用SONAME
之类的链接进行关联。您需要将SONAME
设置为libA.so
。