0

我正在尝试使用从端口安装的 g++4.8 在 Mac 上构建 boost 库。

我制作了 ~/user-config.jam 并添加了一行using gcc : : g++-mp-4.8 ;go 使用 g++ 4.8 编译器。我安装了 bjam 和 b2 brew install bjam

问题是,当我使用b2命令构建 boost 时,出现此链接错误:

ld: unknown option: -R
collect2: error: ld returned 1 exit status

这是因为 g++4.8 无法像 Apple 的 g++ 4.2 那样识别 -R 选项。

如何设置 g++4.8 的构建选项?这是 b2 使用的命令。我有这个站点以获取配置信息,但我找不到设置工具集配置的有用信息。

"g++-mp-4.8"  -Wl,-R -Wl,"/System/Library/Frameworks/Python.framework/Versions/2.7/lib" 
-Wl,-R -Wl,"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config"  -o 
"stage/lib/libboost_system.dylib" -Wl,-h -Wl,libboost_system.dylib -shared -Wl,--start-group 
"bin.v2/libs/system/build/gcc-4.8.0/release/threading-multi/error_code.o"  -Wl,-Bstatic  -Wl,
-Bdynamic  -Wl,--end-group  
4

1 回答 1

1

这是使用 g++ 生成 dylib 文件的错误。我认为没有必要甚至不可能用 g++ 生成 dylib 文件,但我只是找到了消除错误的方法。我没有检查生成的dylib是否运行良好。我可以毫无问题地获取静态库文件,因此可以使用带有 g++4.8 的库。

问题是 g++ 无法识别许多选项: -h -B -R 在构建 dylib 文件时。如果你只想要静态库,你可以得到它们。

我不得不修改 gcc.jam 文件以不提供选项。

来自 .../tools/build/v2/tools/gcc.jam

取消注释生成错误选项的代码。

第 855-858 行删除 -B 选项

# toolset.flags $(toolset).link FINDLIBS-ST-PFX
#     $(condition)/<runtime-link>shared : -Wl,-Bstatic : unchecked ;
# toolset.flags $(toolset).link FINDLIBS-SA-PFX
#     $(condition)/<runtime-link>shared : -Wl,-Bdynamic : unchecked ;

第 815-820 行删除 -R 选项

#toolset.flags $(toolset).link OPTIONS     $(condition)/<strip>on : -Wl,--strip-all   : unchecked ;
#toolset.flags $(toolset).link RPATH       $(condition)           : <dll-path>        : unchecked ;
#toolset.flags $(toolset).link RPATH_LINK  $(condition)           : <xdll-path>       : unchecked ;
#toolset.flags $(toolset).link START-GROUP $(condition)           : -Wl,--start-group : unchecked ;
#toolset.flags $(toolset).link END-GROUP   $(condition)           : -Wl,--end-group   : unchecked ;

第 479 行删除 -h 选项

#SONAME_OPTION = -h ;
于 2013-07-02T21:49:58.427 回答