Mac上的libstdc ++中的C ++ 11标准库

时间:2013-04-06 17:27:00

标签: xcode macos clang libstdc++ libc++

在我目前正在处理的Xcode项目中,我正在使用带有Apple LLVM 4.2(clang)编译器的C ++ 11,并使用libstdc ++作为我的标准库,因为我使用的是未编译的库(NTL)使用libc ++,所以我必须使用libstdc ++。

编写以下代码时:

#include <regex>
int main()
{
     return 0;
}

它没有编译,说:

'regex' file not found

所以我不能在我的libstdc ++中使用任何C ++ 11库(试过<mutex><thread>)。

我试图采用的另一种方法是使用cc和libc ++重新编译NTL,但这似乎没什么用。以下是产生的一些错误:

../include/NTL/config.h:57:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:88:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:95:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:112:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:120:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:143:7: error: expected value in expression
#elif 
      ^
../include/NTL/config.h:168:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:189:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:208:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:226:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:248:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:260:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:273:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:289:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:309:5: error: expected value in expression
#if 
    ^
../include/NTL/config.h:326:7: error: expected value in expression
#elif 
      ^
In file included from FFT.c:3:
In file included from ../include/NTL/FFT.h:6:
In file included from ../include/NTL/ZZ.h:19:
../include/NTL/tools.h:21:10: fatal error: 'iostream.h' file not found`

似乎配置标头以某种方式“损坏”并且libc ++没有<iostream.h>和旧的c ++标头。因此,重新编译NTL对我来说有点麻烦。

所以,我该如何解决?我怎样才能在我的项目中使用libstdc ++并拥有C ++ 11库?如果这有帮助,我用brew安装了g ++ - 4.8。有没有办法将clang使用的libstdc ++映射到新的?

1 个答案:

答案 0 :(得分:2)

您需要告诉clang的副本如何找到您要使用的libstdc ++标头。显然它没有找到它们。我认为你想要的标志是"-nostdinc -I /path/to/better/headers"

第一部分告诉clang不要使用它的标准头文件,第二部分告诉它在“那边”寻找标题。