我已经成功地使用GCC-4.6在Ubuntu 12.04上构建并安装了LLVM-Clang trunk(2012年4月23日版本),并使用此Clang-build构建了libc++(库)。当我想要使用它时,我必须按照以下方式提供-lc++
和-libstdc++
。
预设安装路径为~/alt
。
/home/per/alt/bin/clang -x c++ -I/home/per/alt/include/v1 -L/home/per/alt/lib -std=gnu++0x -g -Wall ~/f.cpp -lm -lc++ -lstdc++ -lpthread -o f
编译包含f.cpp
的代码
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, const char * argv[]) {
cout << "sxx" << endl;
return 0;
}
如果省略
-lstdc++
,将会出现链接错误。/home/per/alt/include/v1/ostream:989: error: undefined reference to '__cxa_begin_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/tmp/f-4l9mgl.o(.eh_frame+0xd3): error: undefined reference to '__gxx_personality_v0'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Compilation exited abnormally with code 1 at Tue Apr 24 13:59:22
为什么libc++
不能完全替代libstdc++
?
main
的签名不正确,我很惊讶它被接受了。 - Matthieu M.