小牛队中C++ 11发生了什么奇怪的事情?

小牛队中C++ 11发生了什么奇怪的事情?,c++,c++11,osx-mavericks,g++4.8,C++,C++11,Osx Mavericks,G++4.8,我使用的是通过MacPorts安装的GCC4.8,旧的C++11代码将不再编译 如果我使用不带-std=c++11标志的编译器,那么它在这个测试代码中就可以正常工作 #include <cctype> int main() { std::isalnum('c'); return 0; } [bash] g++48 test.cpp 有人知道是什么导致了这个问题吗? 非常感谢您的帮助OSX Mavericks升级将清除大量XCode安装目录。为了恢复它们,您需要重新安

我使用的是通过MacPorts安装的GCC4.8,旧的C++11代码将不再编译

如果我使用不带-std=c++11标志的编译器,那么它在这个测试代码中就可以正常工作

#include <cctype>

int main() {
  std::isalnum('c');
  return 0;
}


[bash] g++48 test.cpp 
有人知道是什么导致了这个问题吗?
非常感谢您的帮助

OSX Mavericks升级将清除大量XCode安装目录。为了恢复它们,您需要重新安装XCode命令行工具

xcode-select --install
然后同意下载提示


如果失败,您可以尝试从这里手动安装:

也许您只安装了gcc的32位部分?试试-m32。

从昨天开始,我尝试重新安装Xcode命令行工具,使用 xcode选择-安装 不幸的是,它也不起作用了

但后来我从一家公司得到了它

不幸的是,重新安装命令行工具也没有帮助:

我想我不会和你一起去

clang++ -std=c++11 -stdlib=libc++

除非有正式的解决方案。

这与安装错误的osx cmdline工具无关,但如中所述,与10.9 SDK头中更改的一些内联相关宏有关,特别是在usr/include/sys/cdefs.h中

作为一种快速解决方案,您可以利用GCC的固定包含机制,并提供一个略微修改的/Ur/Is/sys/Cdfs.h版本,以防止编译C++代码时出现的问题:

找到你安装的GCC所在的位置,我将使用GCCROOT mdkir$GCCROOT/lib/gcc/x86_64-apple-darwinXXX/4.X.Y/include-fixed/sys,其中darwinXXX取决于编译gcc的位置,4.X.Y是编译的gcc版本 编辑刚复制的文件..../include fixed/sys/cdefs.h以应用以下修补程序:

@@ -216,7 +215,7 @@

#if __STDC_VERSION__ >= 199901L && (!defined(__GNUC__) || defined(__clang__))
# define __header_inline           inline
-#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)
+#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) && !defined (__cplusplus)
# define __header_inline           extern __inline __attribute__((__gnu_inline__))
#elif defined(__GNUC__)
# define __header_inline           extern __inline
<>这导致编译C++代码时,扩展< /p> __标题\u内联->外部\u内联

而不是

__标题\u内联->外部\u内联\u属性\u内联\u gnu\u内联__


这显然会导致GCC不能真正内联isalnum,从而在符号上留下链接时间依赖关系,即它会试图在某个库中找到它,从而导致链接错误

尝试重新安装xcode命令行工具是否有使用g++的特定原因?Clang支持所有的GCC扩展,然后是一些,并且完全支持C++11,而上次我检查时,GCC的C++11库仍然缺少部分。这看起来像是一个GCC安装问题。链接器似乎找不到标准库。尝试重新安装GCC。如果MacPorts版本仍然不起作用,请从其他来源(如自制)试用。@zneak我不知道他的情况,但我使用GCC,因为clang有一些bug导致它无法编译我的代码。libstdc++还提供了调试迭代器支持,我认为这是非常宝贵的。没有,而且它以前工作过。但是你是对的,看起来Mavericks移动了一些东西…我在升级到Mavericks之前和之后都做了这些,否则我甚至无法运行第一个案例g++48 test.cpp。我更新了macports,这花了一段时间,然后我尝试通过XCode select-install再次安装XCode命令行工具,但是,它说它目前在服务器上不可用。如问题所述,我将在MacPorts安装G++48后重试。Xcode不是问题所在。升级到Mavericks后,使用MacPorts的GCC4.8,我遇到了另一个缺少符号的类似问题,对我来说,按照说明重新安装命令行工具并修复了它。我无法准确地回忆起符号是什么,因此行为上的差异可能与此有关。命令行工具现在似乎是Xcode安装的一部分-当然,如果我从应用商店安装Xcode 5.0.1,我似乎会自动获得所有的命令行工具,而它们以前不工作。而且,我甚至不需要运行xcode select。。。真的不知道这里发生了什么。。。
@@ -216,7 +215,7 @@

#if __STDC_VERSION__ >= 199901L && (!defined(__GNUC__) || defined(__clang__))
# define __header_inline           inline
-#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)
+#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) && !defined (__cplusplus)
# define __header_inline           extern __inline __attribute__((__gnu_inline__))
#elif defined(__GNUC__)
# define __header_inline           extern __inline