我正在使用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)
如果我将命令更改为
clang ++ -o hello.out -stdlib = libstdc ++ hello.cpp
我没有收到任何错误。
有没有办法让“-stdlib = libstdc ++”成为clang ++的默认设置,或者使用某些配置设置或某些环境变量?另外,仅仅为了我的信息,为什么我会收到错误?
答案 0 :(得分:4)
MACOSX_DEPLOYMENT_TARGET
可能就是您要找的。 p>
export MACOSX_DEPLOYMENT_TARGET=10.8
应该clang
默认为libstdc++
而不是libc++
。
答案 1 :(得分:2)
在OS X 10.9.x之前:
默认值为
libstdc++
(使用clang ++ -o hello.out hello.cpp) 本来可以的。
OS X 10.9.x :
默认值为
libc++
(如您所知,包含标志 -stdlib = libstdc ++正确链接你的项目。
由于您尝试编译使用不在较新LLVM libc++
标准库设计范围内的符号的代码,因此会收到错误。至于更改clang
使用的默认值,您可能需要修改ToolChains.cpp (docs),例如:
- DAL->AddJoinedArg(0, Opts.getOption(options::OPT_stdlib_EQ), "libc++");
+ DAL->AddJoinedArg(0, Opts.getOption(options::OPT_stdlib_EQ), "libstdc++");