我尝试通过Homebrew将Boost 1.55连接到Xcode 5。 Brew按原样安装它。在/ usr / local / include&& / usr / local / lib在Boost头文件和库中出现了别名。
Xcode"搜索路径"设置: http://i.imgur.com/j5GJ0sh.png http://i.imgur.com/DXRxiyA.png
但是当我尝试编译简单的例子时:
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;
int main()
{
const regex expression( "How to re" );
string string1 = "How to re";
bool match=regex_match(string1,expression);
if (match){
cout<<"Yes"<<endl;
}
return 0;
}
错误:
架构x86_64的未定义符号:&#34; boost :: basic_regex&gt;
:: do_assign(char const *,char const *,unsigned int)&#34;,引自: boost :: basic_regex&gt; &gt; :: assign(char const *,char const *, main.o中的unsigned int)&#34; boost :: re_detail :: get_mem_block()&#34;, 引自: 提高:: re_detail :: perl_matcher, std :: __ 1 :: allocator&gt; &gt;,boost :: regex_traits&gt; :: main.o中的:: extend_stack() 提高:: re_detail :: save_state_init :: save_state_init(升压:: re_detail :: saved_state **, main.o中的boost :: re_detail :: saved_state **) &#34; boost :: re_detail :: put_mem_block(void *)&#34;,引自: main.o中的boost :: re_detail :: save_state_init :: ~save_state_init() 提高:: re_detail :: perl_matcher, std :: __ 1 :: allocator&gt; &gt;,boost :: regex_traits&gt; :: unwind_extra_block(bool)在main.o&#34; boost :: re_detail :: verify_options(unsigned int, boost :: regex_constants :: _ match_flags)&#34;,引自: 提高:: re_detail :: perl_matcher, std :: __ 1 :: allocator&gt; &gt;,boost :: regex_traits&gt; :: match_imp()在main.o&#34; boost :: re_detail :: raise_runtime_error(std :: runtime_error const&amp;)&#34;, 引自: void boost :: re_detail :: raise_error&gt; &GT; (boost :: regex_traits_wrapper&gt;&gt; const&amp;, main.o中的boost :: regex_constants :: error_type) &#34;升压:: re_detail :: get_default_error_string(升压:: regex_constants :: ERROR_TYPE)&#34 ;, 引自: 提高:: re_detail :: cpp_regex_traits_implementation ::的error_string(升压:: regex_constants :: ERROR_TYPE) 在main.o中的const &#34; boost :: re_detail :: cpp_regex_traits_implementation :: transform_primary(char const *,char const *)const&#34;,引自: main :: o中的boost :: cpp_regex_traits :: transform_primary(char const *,char const *)const &#34;升压:: re_detail :: cpp_regex_traits_implementation ::变换(炭 const *,char const *)const&#34;,引自: 在main.o中的boost :: cpp_regex_traits :: transform(char const *,char const *)const ld:找不到架构的符号 x86_64 clang:错误:链接器命令失败,退出代码为1(使用-v to 见调用)
真的很累,所以,请求你的帮助。
谢谢你, - 菲利普
答案 0 :(得分:2)
您有几个选项,但所有选项都涉及将库libboost_regex
添加到项目中以解决链接错误。即使您使用自制程序安装了boost,仍然需要将库添加到项目中,因为boost的正则表达式代码包含已编译的部分。如果不添加库,则链接器无法解析符号。
第一个选项是将/usr/local/lib
添加到图书馆搜索路径,并将-lboost_regex
添加到其他链接标记。如果选择此选项,则可能还需要将/usr/local/lib
添加到运行路径搜索路径。此方法将链接到/usr/local/lib
中的动态库。
如果您希望自己的程序是自包含的,则可以链接.a
的静态(boost_regex
)版本。为此,请在构建设置 - 链接二进制文件库中将libboost_regex.a
添加到项目中。