我想用scons链接项目中的一些动态库。
示例:
源/ main.cpp中
工具/ LIB / libboost_system.dylib
二进制位置
源/ progbinary
我的问题是,在链接过程之后,二进制文件找不到libboost_system.dylib
dyld:未加载库:libboost_system.dylib
otool -L
显示了问题。我可以通过一个纠正路径的小脚来解决这个问题。但我想在scons中这样做。
在linux上,我只需在scons中设置RPATH
即可。
-----来自@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 source / prog -dynamiclib -install_name @ executable_path / tools / lib / libboost_system.dylib source / main.o -Ltools / lib -lboost_system
答案 0 :(得分: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完成。