我在Xcode 7.0中将boost库链接到我的C ++程序时遇到了一些麻烦。我正在运行OSX 10.10.5,我下载了Boost 1.59.0。
Xcode抛出的错误是:
架构x86_64的未定义符号: “boost :: math :: tools :: promote_args :: type boost :: math :: beta(int,int,int)”,引自: _main in main.o
ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
在谷歌搜索了一天的大部分时间后,我看到很多人都有类似的问题,但没有一个修复工作对我有用。
我尝试的第一件事是: http://www.nullptr.me/2014/08/20/boost-with-xcode/
我将Xcode中的搜索路径更改为相应的目录,在“Other Linker Flags”下添加了“-L / usr / local / lib -lboost_math_c99 -lboost_math_tr1”。这给了我同样的错误。奇怪的是,当我从上面的博客中复制确切的代码时,一切都运行正常(因此从boost连接chrono和系统库是好的,但是一旦我尝试再次使用数学函数,它就会抛出错误)。
然后我看到了许多具有类似建议的stackoverflow响应:
Boost Xcode C++ command line Undefined symbols for architecture x86_64
Using Boost on XCode 5 - Apple LLVM 5.0
Linking troubles with boost::program_options on OSX using LLVM
这些响应似乎表明我需要使用clang和std11标志重新编译boost。我是这样做的:
./ bootstrap.sh toolset = clang --with-libraries = math
./ b2 toolset = clang cxxflags =“ - std = c ++ 11 -stdlib = libc ++“variant = release linkflags =” - stdlib = libc ++“link = static stage
然后我将新库放在预期的位置。然而,当我尝试构建Xcode时,我得到了完全相同的错误。
作为参考,抛出错误的行是:
double ell = boost :: math :: beta(2,2,1);
在顶部我已经包括:
升压/数学/ special_functions / gamma.hpp
升压/数学/ tr1.hpp
非常感谢任何帮助。我很难理解为什么我可以毫不费力地使用boost中的计时器和系统库,但数学会抛出错误。我是统计学家,我的目标是加速R包,但我需要beta功能,这似乎最容易通过boost访问。如果我能提供更多信息,请告诉我。