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

时间:2015-04-19 17:32:45

标签: c++ regex macos boost clang

我试图使用boost :: sregex_iterator编写一个c ++程序,并在尝试编译时收到链接错误。我过去曾经成功使用过boost multiprecision,所以我知道至少有一些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...

我已经阅读了一些关于人们遇到类似问题的其他问题,例如:How to link boost library 1.54 using clang?。从响应中,我收集到我应该链接-lboost_regex-mt,但当我将其添加到命令行时,我收到消息:&#34; ld:找不到库。&#34;

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

1 个答案:

答案 0 :(得分:0)

回答here

据推测,如果您正确安装了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下。