【发布时间】:2016-02-13 10:38:11
【问题描述】:
我已经成功构建了我的动态库,它依赖于使用自定义前缀 (./b2 install --prefix=PREFIX) 构建和安装的 boost 库。但是,当我在我的库上运行 otool -L 时,我会得到如下输出:
...
libboost_regex.dylib (compatibility version 0.0.0, current version 0.0.0)
libboost_system.dylib (compatibility version 0.0.0, current version 0.0.0)
...
与其他依赖项不同,它没有通向这些 boost 库的完整路径。当我的库被应用程序加载时,这会导致运行时错误。
我知道可以使用install_name_tool 来手动解决这个问题。但是,我想弄清楚,为什么它只发生在 boost 库中而不发生在我的库所依赖的其他依赖项上?
编辑
我被要求给出一个构建命令的例子,但像往常一样,“现实生活”的例子有点复杂。
就我而言,有一个库 libA.dylib 依赖于 boost。然后,我的库 libMy.dylib 也依赖于 libA.dylib 和 boost。问题出现在configure 步骤中,当执行简单的库存在检查时(类似于AC_CHECK_LIB 的自定义测试程序)。该检查尝试构建一个与libA.dylib 链接的小测试程序,以证明libA.dylib 的可用性,但由于无法找到boost 库的错误而失败。当然它不会找到它们,因为otool -L libA.dylib 给了我没有完整路径的提升库。
【问题讨论】:
-
你能发布构建命令吗?您是否指定 -L 以在您的 dll 中保留 boost lib 路径,否则它可能只是在您的 LD 路径中查找。
-
@user3545806 请看上面的更新
标签: c++ macos boost dylib otool