【问题标题】:shared library depends on other libraries with hardcoded paths共享库依赖于具有硬编码路径的其他库
【发布时间】:2017-10-27 14:53:43
【问题描述】:

我正在构建 opencv,但一些 so 库包含对其他共享库的依赖项,这些库的名称包含路径元素 ../../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

【问题讨论】:

    标签: c++ opencv shared-libraries


    【解决方案1】:

    根据another question for shared library without hardcoding full dependency path的阅读,有两种方法可以对路径进行编码:

    • 使用-Wl,-rpath....。不知何故,你需要删除它。
    • 如果libA.so 没有SONAME,则使用"~/deps/A/lib/libA.so" 链接。您需要将SONAME 设置为libA.so

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 2016-06-06
      • 2014-03-22
      • 2011-12-16
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      相关资源
      最近更新 更多