对于使用Xcode的Mac OS Mavericks,对于clang ++,默认为lib = stdlibc ++?

Joe*_*lin 5 c++ macos clang++

我正在使用Xcode 5.1.1运行MacOS X Mavericks,包括命令行工具.我正在使用Xcode提供的clang ++编译简单的C++程序,版本信息是:Apple LLVM版本5.1(clang-503.0.40)(基于LLVM 3.4svn)

我发现如果我尝试运行以下命令

clang ++ -o hello.out hello.cpp

我收到以下错误:

Undefined symbols for architecture x86_64:
"std::ios_base::Init::Init()", referenced from:
___cxx_global_var_init in hello-2ad0da.o
"std::ios_base::Init::~Init()", referenced from:
___cxx_global_var_init in hello-2ad0da.o
"std::cout", referenced from:
_main in hello-2ad0da.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in hello-2ad0da.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

如果我将命令更改为

clang ++ -o hello.out -stdlib = libstdc ++ hello.cpp

我没有得到任何错误.

有没有办法使"-stdlib = libstdc ++"成为clang ++的默认值,或者使用某些配置设置或某些环境变量?另外,仅为了我的信息,为什么我会收到错误?

l'L*_*L'l 3

OS X 10.9.x 之前

默认值libstdc++(使用 clang++ -o hello.out hello.cpp)就可以正常工作。

操作系统 X 10.9.x

默认值是libc++(正如您所知,包含标志 -stdlib=libstdc++ 正确链接您的项目)。

由于您尝试编译使用的符号不在较新LLVM libc++标准库的设计范围内的代码,因此您会收到错误。至于更改clang使用的默认值,您可能必须使用以下内容修补它的ToolChains.cpp (文档) :

-     DAL->AddJoinedArg(0, Opts.getOption(options::OPT_stdlib_EQ), "libc++");
+     DAL->AddJoinedArg(0, Opts.getOption(options::OPT_stdlib_EQ), "libstdc++");
Run Code Online (Sandbox Code Playgroud)