Xcode 5.1.1和Boost

时间:2014-05-04 12:13:15

标签: c++ boost

通过将.dylib文件(boost)添加到项目中来解决问题。

我尝试通过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     见调用)

  

真的很累,所以,请求你的帮助。

谢谢你,   - 菲利普

1 个答案:

答案 0 :(得分:2)

您有几个选项,但所有选项都涉及将库libboost_regex添加到项目中以解决链接错误。即使您使用自制程序安装了boost,仍然需要将库添加到项目中,因为boost的正则表达式代码包含已编译的部分。如果不添加库,则链接器无法解析符号。

第一个选项是将/usr/local/lib添加到图书馆搜索路径,并将-lboost_regex添加到其他链接标记。如果选择此选项,则可能还需要将/usr/local/lib添加到运行路径搜索路径。此方法将链接到/usr/local/lib中的动态库。

如果您希望自己的程序是自包含的,则可以链接.a的静态(boost_regex)版本。为此,请在构建设置 - 链接二进制文件库中将libboost_regex.a添加到项目中。