Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 叮当助推怪事_Macos_Boost_Clang_Macports - Fatal编程技术网

Macos 叮当助推怪事

Macos 叮当助推怪事,macos,boost,clang,macports,Macos,Boost,Clang,Macports,我正在做一个宠物项目,正在使用clang++(特别是MacPorts clang 3.1)。所以我决定切换到libc++(使用std::array等),但我使用的是boost(特别是asio和regex),所以我必须使用libc++重新编译boost。我删除了安装在macports中的boost,并从源代码构建boost,现在安装在/usr/local/include和/usr/local/lib中。从那以后,我就不能编译了。以下是我遇到的一些奇怪现象: 执行时: clang++ -g -st

我正在做一个宠物项目,正在使用clang++(特别是MacPorts clang 3.1)。所以我决定切换到libc++(使用std::array等),但我使用的是boost(特别是asio和regex),所以我必须使用libc++重新编译boost。我删除了安装在macports中的boost,并从源代码构建boost,现在安装在/usr/local/include和/usr/local/lib中。从那以后,我就不能编译了。以下是我遇到的一些奇怪现象:

执行时:

clang++ -g  -std=c++11 -stdlib=libc++ -c main.cpp
我遇到了一个奇怪的编译错误,与move构造函数有关(这个错误还有很多,但正如您看到的,它来自boost):

这将编译(但稍后链接失败)。为什么会这样?没有路径我该怎么办?必须在-stdlib=前面加上-I吗

现在是有趣的部分:

尽管现在一切都已编译,但它不会链接。执行时:

clang++ main.o FTPClient.o FTPConnection.o -lboost_system -lboost_regex -std=c++11 -stdlib=libc++  -g  -o cli
我得到的信息是:

Undefined symbols for architecture x86_64:
"__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  boost::re_detail::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const in libboost_regex.a(instances.o)
  boost::re_detail::cpp_regex_traits_implementation<char>::lookup_classname_imp(char const*, char const*) const in libboost_regex.a(instances.o)
  boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, long) in libboost_regex.a(instances.o)
  boost::re_detail::cpp_regex_traits_implementation<char>::lookup_classname(char const*, char const*) const in libboost_regex.a(instances.o)
  ld: symbol(s) not found for architecture x86_64
架构x86_64的未定义符号: “\uuuu ZNSt3\uuuu 112基本字符\uu 11跟踪字符\uu 9分配起始字符\uuuu 9启用\uuu ifIXsr21\uu是\uu向前\uu迭代字符\uu11值每种类型的字符”\uuuu9引用自: boost::re_detail::cpp_regex_traits_实现::libboost_regex.a(instances.o)中的lookup_collatename(char const*,char const*)const boost::re_detail::cpp_regex_traits_实现::libboost_regex.a(instances.o)中的lookup_classname_imp(char const*,char const*)const libboost_regex.a(instances.o)中的boost::re_detail::basic_regex_parser::fail(boost::regex_常量::error_type,long,std::__1::basic_string,long) boost::re_detail::cpp_regex_traits_实现::libboost_regex.a(instances.o)中的lookup_classname(char const*,char const*)const ld:找不到架构x86_64的符号 现在我在想,也许我少了一个标志,但我不知道它是什么。这可能是什么原因

非常感谢

编辑:在查看安装boost的日志时,我注意到:

..failed clang-darwin.link.dll /usr/local/lib/libboost_filesystem.dylib...
clang-darwin.link.dll /usr/local/lib/libboost_regex.dylib
Undefined symbols for architecture x86_64:
  "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  boost::c_regex_traits<char>::transform(char const*, char const*) in c_regex_traits.o
  boost::c_regex_traits<char>::lookup_classname(char const*, char const*) in c_regex_traits.o
  boost::c_regex_traits<char>::lookup_collatename(char const*, char const*) in c_regex_traits.o
  boost::re_detail::RegExData::update() in cregex.o
  boost::RegEx::What(int) const in cregex.o
  boost::re_detail::pred2::operator()(boost::match_results<char const*, std::__1::allocator<boost::sub_match<char const*> > > const&) in cregex.o
  boost::re_detail::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const in instances.o
  ...
  "__ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  boost::c_regex_traits<wchar_t>::transform(wchar_t const*, wchar_t const*) in wc_regex_traits.o


  boost::c_regex_traits<wchar_t>::lookup_classname(wchar_t const*, wchar_t const*) in wc_regex_traits.o
  boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_collatename(wchar_t const*, wchar_t const*) const in winstances.o
  boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_classname_imp(wchar_t const*, wchar_t const*) const in winstances.o
  boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_classname(wchar_t const*, wchar_t const*) const in winstances.o
ld: symbol(s) not found for architecture x86_64  
clang: error: linker command failed with exit code 1 (use -v to see invocation)
。失败的clang-darwin.link.dll/usr/local/lib/libboost\u filesystem.dylib。。。
clang-darwin.link.dll/usr/local/lib/libboost_regex.dylib
架构x86_64的未定义符号:
“\uuuu ZNSt3\uuuu 112基本字符\uu 11跟踪字符\uu 9分配起始字符\uuuu 9启用\uuu ifIXsr21\uu是\uu向前\uu迭代字符\uu11值每种类型的字符”\uuuu9引用自:
boost::c_regex_traits::c_regex_traits.o中的变换(char const*,char const*)
boost::c_regex_traits::在c_regex_traits.o中查找_类名(char const*,char const*)
boost::c_regex_traits::在c_regex_traits.o中查找名称(char const*,char const*)
cregex.o中的boost::re_detail::RegExData::update()
boost::RegEx::cregex.o中的什么(int)常量
cregex.o中的boost::re_detail::pred2::operator()(boost::match_results const&)
boost::re_detail::cpp_regex_traits_实现::lookup_collatename(char const*,char const*)实例中的const.o
...
“\uuuu ZNSt3\uuuuu 112基本字符串\uu11字符\u9跟踪字符串\uuu9初始启用\uuu9 ifIXsr21\uuuu是向前的\u0迭代值每种类型a\u0”,引用自:
boost::c_regex_traits::wc_regex_traits.o中的变换(wchar_t const*,wchar_t const*)
boost::c_regex_traits::在wc_regex_traits.o中查找类名称(wchar_t const*,wchar_t const*)
boost::re_detail::cpp_regex_traits_implementation::lookup_collatename(wchar\u t const*,wchar\u t const*)const in winstances.o
boost::re_detail::cpp_regex_traits_实现::lookup_classname_imp(wchar\u t const*,wchar\u t const*)const in winstances.o
boost::re_detail::cpp_regex_traits_实现::lookup_classname(wchar_t const*,wchar_t const*)const in winstances.o
ld:找不到架构x86_64的符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
这是否意味着boost正则表达式可能与-libc++不兼容

编辑2:我尝试使用std::regex,但我得到了以下结果:

Undefined symbols for architecture x86_64:
   "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::regex_traits<char>::__lookup_collatename<char const*>(char const*, char const*, char) const in main.o
  unsigned int std::__1::regex_traits<char>::__lookup_classname<char const*>(char const*, char const*, bool, char) const in main.o
 ld: symbol(s) not found for architecture x86_64
架构x86_64的未定义符号: “\uuuu ZNSt3\uuuu 112基本字符\uu 11跟踪字符\uu 9分配起始字符\uuuu 9启用\uuu ifIXsr21\uu是\uu向前\uu迭代字符\uu11值每种类型的字符”\uuuu9引用自: std::uuu 1::基本字符串std:uuu 1::regex\u traits::uuu lookup\u collatename(char const*,char const*,char)main.o中的const unsigned int std::_1::regex_traits::_lookup_类名称(char const*,char const*,bool,char)main.o中的const ld:找不到架构x86_64的符号
一个有用但不令人满意的答案:libc++包含std::regex,您可以使用它来代替boost::regex。

您是否使用
clang-stdlib=libc++-std=c++11
构建boost?是的:
/b2 toolset=clang cxflags=“-I-std=c++11-stdlib libc++”linkflags=“-stdlib=libc++”
,无论是否使用“-I”(正如我在构建时看到的一样,同样奇怪的move构造函数错误)和使用了-几次。我也使用了std::regex,但后来我得到了一个链接错误(参见我编辑的帖子)。我的libc++安装可能会出问题吗?MacPorts clang是否甚至附带libc++二进制文件(显然,在编译.cpp文件时附带了头文件)?您可以在/usr/lib中查找libc++.dylib。这是libc++的二进制文件。注意:如果您使用的是pcre(与perl兼容的正则表达式)然后你不能切换到std::regex。如果Lion那么Xcode包含clang3.1,那么/usr/include/c++不是你想要的,那么我使用的是clang3.0,所以我使用的是MacPorts。我应该在我的include路径中添加什么,这样它就不会使用/usr/include/c++?注意:我使用了
-I/opt/local/include
,我得到了这个奇怪的移动编译时std::regex出现tor错误。如果是Lion,那么您不需要macports来实现clang-使用Xcode one-然后发生了什么?我不知道Xcode有3.1,但安装了最新的命令行工具,我的项目现在就可以编译了!(我猜macports的lib是拙劣的或其他东西)非常感谢!不,修复方法是现在您正在使用Xcode的叮当声-问题是您的命令行没有正确的include和libs-但是要简单得多
..failed clang-darwin.link.dll /usr/local/lib/libboost_filesystem.dylib...
clang-darwin.link.dll /usr/local/lib/libboost_regex.dylib
Undefined symbols for architecture x86_64:
  "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  boost::c_regex_traits<char>::transform(char const*, char const*) in c_regex_traits.o
  boost::c_regex_traits<char>::lookup_classname(char const*, char const*) in c_regex_traits.o
  boost::c_regex_traits<char>::lookup_collatename(char const*, char const*) in c_regex_traits.o
  boost::re_detail::RegExData::update() in cregex.o
  boost::RegEx::What(int) const in cregex.o
  boost::re_detail::pred2::operator()(boost::match_results<char const*, std::__1::allocator<boost::sub_match<char const*> > > const&) in cregex.o
  boost::re_detail::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const in instances.o
  ...
  "__ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  boost::c_regex_traits<wchar_t>::transform(wchar_t const*, wchar_t const*) in wc_regex_traits.o


  boost::c_regex_traits<wchar_t>::lookup_classname(wchar_t const*, wchar_t const*) in wc_regex_traits.o
  boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_collatename(wchar_t const*, wchar_t const*) const in winstances.o
  boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_classname_imp(wchar_t const*, wchar_t const*) const in winstances.o
  boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_classname(wchar_t const*, wchar_t const*) const in winstances.o
ld: symbol(s) not found for architecture x86_64  
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture x86_64:
   "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from:
  std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::regex_traits<char>::__lookup_collatename<char const*>(char const*, char const*, char) const in main.o
  unsigned int std::__1::regex_traits<char>::__lookup_classname<char const*>(char const*, char const*, bool, char) const in main.o
 ld: symbol(s) not found for architecture x86_64