C++ 无法使用XCode 4.6.3构建简单boost::regex示例

C++ 无法使用XCode 4.6.3构建简单boost::regex示例,c++,xcode,boost,C++,Xcode,Boost,我正在尝试使用regex构建一个非常简单的boost示例,只是为了尝试在XCode项目中使用boost,我遇到了一些奇怪的问题 首先,我下载了boost 1.53.0,然后使用以下命令引导并构建它: /bootstrap.sh--带库=regex /b2安装 然后我制作了一个非常简单的正则表达式示例程序: #include <iostream> #include <boost/regex.hpp> int main(int argc, const char * argv

我正在尝试使用regex构建一个非常简单的boost示例,只是为了尝试在XCode项目中使用boost,我遇到了一些奇怪的问题

首先,我下载了boost 1.53.0,然后使用以下命令引导并构建它:

/bootstrap.sh--带库=regex

/b2安装

然后我制作了一个非常简单的正则表达式示例程序:

#include <iostream>
#include <boost/regex.hpp>

int main(int argc, const char * argv[])
{

std::string text(" 192.168.0.1 abc 10.0.0.255 10.5.1 1.2.3.4a 5.4.3.2 ");
const char* pattern =
"\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
"\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
"\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
"\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
boost::regex ip_regex(pattern);

boost::sregex_iterator it(text.begin(), text.end(), ip_regex);
boost::sregex_iterator end;
for (; it != end; ++it) {
    std::cout << it->str() << "\n";
    // v.push_back(it->str()); or something similar
}
return 0;
}
#包括
#包括
int main(int argc,const char*argv[]
{
std::字符串文本(“192.168.0.1 abc 10.0.0.255 10.5.1 1.2.3.4a 5.4.3.2”);
常量字符*模式=
“\\b(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)
"\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
"\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
“\\.(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\\b”;
boost::regex ip_regex(模式);
sregex_迭代器it(text.begin()、text.end()、ip_regex);
boost::sregex_迭代器end;
for(;it!=end;++it){
std::cout str()str();或类似的东西
}
返回0;
}
我将静态库I build(boost_regex.a)添加到项目设置build Phases下的“linkbinary With Libraries”,这也隐式更新了构建设置“library Search path”,以指向.a文件所在的库

当我尝试构建时,我现在得到了一组链接错误,这些错误与标准C++库有关。下面是一个片段:

"__gnu_debug::_Safe_sequence_base::_M_detach_all()", referenced from:
      __gnu_debug::_Safe_sequence_base::~_Safe_sequence_base() in libboost_regex.a(cregex.o)
      __gnu_debug::_Safe_sequence_base::~_Safe_sequence_base() in libboost_regex.a(instances.o)
      __gnu_debug::_Safe_sequence_base::~_Safe_sequence_base() in libboost_regex.a(posix_api.o)
      __gnu_debug::_Safe_sequence_base::~_Safe_sequence_base() in libboost_regex.a(wide_posix_api.o)
      __gnu_debug::_Safe_sequence_base::~_Safe_sequence_base() in libboost_regex.a(winstances.o)
  "__gnu_debug::_Error_formatter::_M_message(__gnu_debug::_Debug_msg_id) const", referenced from:
      boost::re_detail::character_pointer_range<char> const* std::lower_bound<boost::re_detail::character_pointer_range<char> const*, boost::re_detail::character_pointer_range<char> >(boost::re_detail::character_pointer_range<char> const*, boost::re_detail::character_pointer_range<char> const*, boost::re_detail::character_pointer_range<char> const&) in libboost_regex.a(c_regex_traits.o)
      bool std::equal<char const*, char const*>(char const*, char const*, char const*) in libboost_regex.a(c_regex_traits.o)
      std::lexicographical_compare(char const*, char const*, char const*, char const*) in libboost_regex.a(c_regex_traits.o)
      bool std::lexicographical_compare<signed char const*, signed char const*>(signed char const*, signed char const*, signed char const*, signed char const*) in libboost_regex.a(c_regex_traits.o)
      std::string::replace(__gnu_cxx::__normal_iterator<char*, std::string>, __gnu_cxx::__normal_iterator<char*, std::string>, char const*, char const*) in libboost_regex.a(c_regex_traits.o)
      std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > >::erase(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > >, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > >) in libboost_regex.a(cregex.o)
      std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > >::erase(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > >, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > >) in libboost_regex.a(cregex.o)
      ...
  "__gnu_debug::_Error_formatter::_M_error() const", referenced from:
      boost::re_detail::character_pointer_range<char> const* std::lower_bound<boost::re_detail::character_pointer_range<char> const*, boost::re_detail::character_pointer_range<char> >(boost::re_detail::character_pointer_range<char> const*, boost::re_detail::character_pointer_range<char> const*, boost::re_detail::character_pointer_range<char> const&) in libboost_regex.a(c_regex_traits.o)
      bool std::equal<char const*, char const*>(char const*, char const*, char const*) in libboost_regex.a(c_regex_traits.o)
      std::lexicographical_compare(char const*, char const*, char const*, char const*) in libboost_regex.a(c_regex_traits.o)
      bool std::lexicographical_compare<signed char const*, signed char const*>(signed char const*, signed char const*, signed char const*, signed char const*) in libboost_regex.a(c_regex_traits.o)
      std::string::replace(__gnu_cxx::__normal_iterator<char*, std::string>, __gnu_cxx::__normal_iterator<char*, std::string>, char const*, char const*) in libboost_regex.a(c_regex_traits.o)
      std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > >::erase(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > >, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > >) in libboost_regex.a(cregex.o)
      std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > >::erase(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > >, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > >) in libboost_regex.a(cregex.o)
      ...
  "__gnu_debug::_Safe_iterator_base::_M_singular() const", referenced from:
      __gnu_debug::_Safe_iterator<std::__norm::_List_iterator<std::string>, std::__debug::list<std::string, std::allocator<std::string> > >::operator=(__gnu_debug::_Safe_iterator<std::__norm::_List_iterator<std::string>, std::__debug::list<std::string, std::allocator<std::string> > > const&) in libboost_regex.a(cregex.o)
      bool __gnu_debug::operator!=<std::__norm::_List_iterator<std::string>, std::__debug::list<std::string, std::allocator<std::string> > >(__gnu_debug::_Safe_iterator<std::__norm::_List_iterator<std::string>, std::__debug::list<std::string, std::allocator<std::string> > > const&, __gnu_debug::_Safe_iterator<std::__norm::_List_iterator<std::string>, std::__debug::list<std::string, std::allocator<std::string> > > const&) in libboost_regex.a(cregex.o)
      bool __gnu_debug::operator==<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > >(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > > const&, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, long> >, std::__debug::map<int, long, std::less<int>, std::allocator<std::pair<int const, long> > > > const&) in libboost_regex.a(cregex.o)
      bool __gnu_debug::operator==<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > >(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > > const&, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > > const&) in libboost_regex.a(cregex.o)
      bool __gnu_debug::operator!=<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > >(__gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > > const&, __gnu_debug::_Safe_iterator<std::_Rb_tree_iterator<std::pair<int const, std::string> >, std::__debug::map<int, std::string, std::less<int>, std::allocator<std::pair<int const, std::string> > > > const&) in libboost_regex.a(cregex.o)
“\uuu gnu\u调试::\u安全\u序列\u基::\u M\u分离\u全部()”,引用自:
__gnu_debug::_Safe_sequence_base::~\u Safe_sequence_base()在libboost_regex.a(cregex.o)中
__gnu_debug::_Safe_sequence_base::~\u Safe_sequence_base()在libboost_regex.a(instances.o)中
__gnu调试::_Safe_sequence_base::~_Safe_sequence_base()在libboost_regex.a(posix_api.o)中
__gnu调试::_Safe_sequence_base::~_Safe_sequence_base()在libboost_regex.a(wide_posix_api.o)中
__gnu调试::_Safe_sequence_base::~_Safe_sequence_base()在libboost_regex.a(winstances.o)中
“uuu gnu_debug::_Error_formatter::_M_message(uuu gnu_debug::_debug_msg_id)const”,引用自:
boost::re_detail::character_pointer_range const*std::lower_bound(boost::re_detail::character_pointer_range const*,boost::re_detail::character_pointer_range const&)在libboost_regex.a(c_regex_traits.o)中
libboost_regex.a(c_regex_traits.o)中的bool std::equal(char const*,char const*,char const*)
libboost_regex.a(c_regex_traits.o)中的词典比较(char const*,char const*,char const*,char const*)
bool std::libboost_regex.a(c_regex_traits.o)中的词典比较(带符号字符常量*、带符号字符常量*、带符号字符常量*、带符号字符常量*)
字符串::替换libboost_regex.a(c_regex_traits.o)中的(uuu gnu_cxx::uuu normal_迭代器,uuu gnu_cxx:::uuu normal_迭代器,char const*,char const*)
libboost_regex.a(cregex.o)中的std:::_调试::映射::擦除(_gnu调试::_安全迭代器,_gnu调试::_安全迭代器)
libboost_regex.a(cregex.o)中的std:::_调试::映射::擦除(_gnu调试::_安全迭代器,_gnu调试::_安全迭代器)
...
“_gnu_debug::_Error_formatter::_M_Error()const”,引用自:
boost::re_detail::character_pointer_range const*std::lower_bound(boost::re_detail::character_pointer_range const*,boost::re_detail::character_pointer_range const&)在libboost_regex.a(c_regex_traits.o)中
libboost_regex.a(c_regex_traits.o)中的bool std::equal(char const*,char const*,char const*)
libboost_regex.a(c_regex_traits.o)中的词典比较(char const*,char const*,char const*,char const*)
bool std::libboost_regex.a(c_regex_traits.o)中的词典比较(带符号字符常量*、带符号字符常量*、带符号字符常量*、带符号字符常量*)
字符串::替换libboost_regex.a(c_regex_traits.o)中的(uuu gnu_cxx::uuu normal_迭代器,uuu gnu_cxx:::uuu normal_迭代器,char const*,char const*)
libboost_regex.a(cregex.o)中的std:::_调试::映射::擦除(_gnu调试::_安全迭代器,_gnu调试::_安全迭代器)
libboost_regex.a(cregex.o)中的std:::_调试::映射::擦除(_gnu调试::_安全迭代器,_gnu调试::_安全迭代器)
...
“_gnu_debug::_Safe_iterator_base::_M_singular()const”,引用自:
__libboost_regex.a(cregex.o)中的gnu_debug:::_Safe_iterator::operator=(u gnu_debug:::_Safe_iterator const&)
bool\uu gnu\u debug::operator=libboost_regex.a(cregex.o)中的(uu gnu_调试::_Safe_迭代器常量&,u gnu调试::_Safe_迭代器常量&)
libboost\u regex.a(cregex.o)中的bool\uu gnu\u debug::operator==(\uu gnu\u debug::\u Safe\u iterator const&,\uu gnu\u debug::::\u Safe\u iterator const&)
libboost\u regex.a(cregex.o)中的bool\uu gnu\u debug::operator==(\uu gnu\u debug::\u Safe\u iterator const&,\uu gnu\u debug::::\u Safe\u iterator const&)
bool\uu gnu\u debug::operator=libboost_regex.a(cregex.o)中的(uu gnu_调试::_Safe_迭代器常量&,u gnu调试::_Safe_迭代器常量&)

有人知道这是什么原因吗?我想不出任何更简单的测试用例……

不确定这是否有用,但几年前当我尝试在Xcode中使用Boost时,我发现我无法使用预构建的libs。相反,我不得不将所有文件添加到Xcode项目中。原因可能是boost自己的安装脚本使用与Xcode项目不匹配的选项构建libs。但是如果你让Xcode来构建它,你就很好了