【问题标题】:scons dylib dynamic linking on macmac上的scons dylib动态链接
【发布时间】:2013-11-07 21:34:18
【问题描述】:

我想用 scons 链接我项目中的一些动态库。

例子:

source/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

【问题讨论】:

  • 您需要获取命令行选项-install_name @executable_path/libWhatever.dylibld。对于make,这需要设置LDFLAGS,但是我不知道如何使用scons

标签: macos dynamic scons dylib


【解决方案1】:

根据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来完成。

【讨论】:

  • 感谢您的帮助。使用您的建议后,问题有所改变。我编辑了上面的帖子
  • @chak,我在关于使用共享库编译的答案中添加了信息。希望这会有所帮助。我对在 mac 上编译的了解不够多,无法提供更多帮助。如果这不起作用,你应该考虑问另一个关于在 mac 上编译的问题。
猜你喜欢
  • 2013-09-06
  • 2013-10-18
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多