在OS X上使用clang编译boost regex时发生链接错误



我正试图使用boost::sregex_iterator编写c++程序,但在尝试编译时收到链接错误。我过去曾成功地使用过boost多精度,所以我知道至少有一些boost库安装成功。我使用clang(Apple LLVM版本6.1.0(clang-602.0.49))在OS X 10.10.3上进行编译。

我的程序包括:

#include <boost/multiprecision/gmp.hpp>
#include <boost/regex.hpp>

我正在使用命令行:

c++ -I /usr/local/boost_1_57_0 input.cpp -lgmp -o words

我收到的错误消息很长,但开头是:

Undefined symbols for architecture x86_64:
"boost::basic_regex...

我读过很多关于有类似问题的人的其他问题,例如:如何使用clang链接boost库1.54?。从响应中,我发现我应该链接-lbox_regex-mt,但当我将其添加到命令行时,我会收到消息:"ld:library not found。">

我的问题是,如果问题只是我需要libboost_regex-mt,有没有一种方法可以在不重新安装所有boost的情况下安装它?如果我确实需要重新安装boost,这次我应该做些什么不同的事情,以便最终使用regex库?如果-lbox_regex-mt不是问题所在,那么我需要做些什么才能使用boost正则表达式?

这里有答案。

假设,如果您正确安装了boost,那么除了标头之外,还应该有库。但是,您缺少一个"-L"选项,该选项指示libboost_regex-mt.so所在的位置。如果没有该选项,链接器将只使用其默认搜索路径来查找库,如果找不到库,则最终会抱怨。

或者,您可以使用链接器的rpath选项在可执行文件中嵌入库搜索路径。这将解析可执行文件运行时.so的位置。另一种选择是修改LD_LIBRARY_PATH环境变量以包含库的位置。

所以你的例子应该是这样的:

c++ -I /usr/local/boost_1_57_0 input.cpp -lgmp -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lboost_regex-mt -o words

假设库位于/usr/local/lib下。

最新更新