Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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
C++ Mac错误:架构x86_64的未定义符号_C++_Macos_Gcc_Makefile_G++ - Fatal编程技术网

C++ Mac错误:架构x86_64的未定义符号

C++ Mac错误:架构x86_64的未定义符号,c++,macos,gcc,makefile,g++,C++,Macos,Gcc,Makefile,G++,我正在尝试安装。我已经安装了依赖项,/autogen.sh工作正常。然而,当我使用make编译时,我得到了下面的错误。我正在运行OSX 10.10.3 Undefined symbols for architecture x86_64: "std::__detail::_Prime_rehash_policy::_M_need_rehash(unsigned long, unsigned long, unsigned long) const", referenced from:

我正在尝试安装。我已经安装了依赖项,
/autogen.sh
工作正常。然而,当我使用
make
编译时,我得到了下面的错误。我正在运行OSX 10.10.3

Undefined symbols for architecture x86_64:
  "std::__detail::_Prime_rehash_policy::_M_need_rehash(unsigned long, unsigned long, unsigned long) const", referenced from:
      std::_Hashtable<unsigned long, std::pair<unsigned long const, int>, std::allocator<std::pair<unsigned long const, int> >, std::__detail::_Select1st, std::equal_to<unsigned long>, std::hash<unsigned long>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_insert_unique_node(unsigned long, unsigned long, std::__detail::_Hash_node<std::pair<unsigned long const, int>, false>*) in evaluate-ngram.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[1]: *** [evaluate-ngram] Error 1
make: *** [all-recursive] Error 1
架构x86_64的未定义符号: “标准::uuu详细信息::u主要政策::u需要(无符号长、无符号长、无符号长)常量”,引用自: std::_哈希表::_M_insert_unique_node(无符号长,无符号长,std:_详细信息::_哈希节点*)在计算ngram.o ld:找不到架构x86_64的符号 collect2:错误:ld返回了1个退出状态 生成[1]:***[评估ngram]错误1 make:**[all recursive]错误1
库是否可能使用C++11

您必须添加以下编译器标志:

-std=c++11 -stdlib=libc++
MacOSX附带了两个标准库版本,一个是较旧的
libstdc++
,另一个是较新的
libc++
。C++11仅受后者的支持。更多详细信息可在本手册中找到

编辑:

根据这一点,要使生成系统知道对编译器标志的更改,请尝试以下操作:

$ export CXXFLAGS="-std=c++11 -stdlib=libc++"
$ export CC=`which clang` # optional step to make sure clang is being used
$ export CXX=`which clang++` # optional step to make sure clang is being used
$ ./autogen.sh
$ make

谢谢因此,我是否将这些标志添加到
make
,即运行
make-std=c++11-stdlib=libc++
?不,它们应该在配置步骤之前添加。我会更新我的答案。谢谢更新。既然我已经运行了
/autogen.sh
make
,我是否应该在重新运行命令之前运行
make clean
?我不确定这是否是必须的,但我建议您至少运行
make clean
,或者更好,删除所有与生成相关的文件。谢谢,但这现在会产生错误:错误:无法识别的命令行选项'-stdlib=libc++'