2

我想将我项目中的一些动态库与 scons 链接起来。

例子:

源/main.cpp

工具/lib/libboost_system.dylib

二进制位置

源/progbinary

我的问题是,在链接过程之后,二进制文件找不到 libboost_system.dylib

dyld:库未加载:libboost_system.dylib

otool -L显示问题。我可以用一个更正路径的小脚本来解决这个问题。但我想在 scons 中做到这一点。

在 linux 上真的很简单,我只需要设置RPATHin scons。

----- 在@Brady 的提示之后

我为我的库添加了 Linkflags。链接后我得到了错误

'g++:错误:-install_name 只允许与 -dynamiclib'

所以我添加到命令

LINKFLAGS = '-dynamiclib install_name @executable_path/libWhatever.dylib'

现在我得到如果我调用我的执行消息

'不能执行二进制文件'

otool -L

给我看看:

@executable_path/tools/lib/libboost_filesystem.dylib(兼容版本 0.0.0,当前版本 0.0.0) libboost_system.dylib(兼容版本 0.0.0,当前版本 0.0.0)

scons 的链接命令如下所示:

/opt/local/bin/g++ -o 源/prog -dynamiclib -install_name @executable_path/tools/lib/libboost_system.dylib 源/main.o -Ltools/lib -lboost_system

4

1 回答 1

2

根据trojanfoe上面提供的评论: scons dylib dynamic linking on mac

需要将以下内容传递给链接器:

-install_name @executable_path/libWhatever.dylib

这可以在 SCons 中完成,如下所示:

env = Environment()
env.Append(LINKFLAGS = ['-install_name @executable_path/libWhatever.dylib'])

如果您需要编译动态(共享)库,可以使用SharedLibrary() builder来完成。

于 2013-10-29T10:10:58.357 回答