我刚下载了CLang源代码,使用CMake创建了一个Visual C ++ 10 IDE工作区,并构建了Visual C ++ 10.0(express)中的所有内容。
现在我在hello world上遇到了一堆链接器错误:
d:\dev\test> type con >foo.cpp #include <iostream> using namespace std; int main() { cout << "Hello, cling-clong world!" << endl; } ^Z d:\dev\test> clang++ foo.cpp foo-839435.o : error LNK2019: unresolved external symbol __ZSt4cout referenced in function _main foo-839435.o : error LNK2019: unresolved external symbol __ZdlPv referenced in function __ZNSt14error_categoryD0Ev foo-839435.o : error LNK2019: unresolved external symbol __ZSt18uncaught_exceptionv referenced in function __ZNSo6sentry D2Ev foo-839435.o : error LNK2019: unresolved external symbol ___cxa_rethrow referenced in function __ZNSt8ios_base5clearEib foo-839435.o : error LNK2019: unresolved external symbol ___cxa_allocate_exception referenced in function __ZNSt8ios_base5clearEib foo-839435.o : error LNK2019: unresolved external symbol ___cxa_throw referenced in function __ZNSt8ios_base5clearEib foo-839435.o : error LNK2019: unresolved external symbol __ZSt17iostream_categoryv referenced in function __ZSt15make_er
那我该怎么办呢?
答案 0 :(得分:4)
如果您想在Windows上尝试使用Clang,我建议使用MinGW内置版本,就像我在这里提供的那样(或者使用您最喜欢的MinGW工具链自行构建):
您将需要gcc
和clang
包(没有linux / mac / cygwin后缀的包)并将它们提取到同一目录。 Clang使用gcc进行链接,并且可以链接到GCC的libstdc ++,几乎可以让你访问C ++标准库。例外适用于32位版本。虽然我对调试信息没有任何好运。
正在努力为Clang带来更好的MS支持,但这是一项缓慢进展的任务。
答案 1 :(得分:2)
我认为这里存在误解。
Clang(慢慢)被教导如何解析 MFC标题。据我所知,FrançoisPichet是关于这个项目的,但是整个头文件中只有一些错误(!),显然VC ++解析附带的标准库很久以前就已经完成了。
但是,这是关于 AST 生成,而不是代码生成。 Clang目前无法正确生成与VC ++库交互的代码。不仅名称不完整,而且ABI仍在形成(在过去的两个月内已经有很多补丁来获得正确的填充/对齐)并且存在长期存在的异常问题。
如果您希望在Windows上使用Clang,您应该使用MinGW或MinGW64,请参阅ruben的答案。
答案 2 :(得分:1)
与MinGW gcc不同,clang不包含glibc库,因此默认情况下,它没有标准库或任何内容。我不知道如何使用Visual C ++标准库,但是从你发布的内容中可以很清楚,默认情况下它会生成像gcc这样的符号,所以你需要将它与glibc或newlib一起使用......
要么指定带有-Ldirectory
的libary路径到.lib文件(或.a用于glibc),要么将它们放入默认的clang搜索路径之一(运行:clang -v -x c++ -fsyntax-only some file
以查看它们。)
答案 3 :(得分:1)
仅使用clang ++编译.cpp然后使用而不是MS链接尝试ld链接器。适合我。
答案 4 :(得分:0)
Clang / LLVM对Windows的支持仍然不完美。尝试包含此选项:-Xclang -cxx-abi -Xclang microsoft
。但是,我不确定它是否能正常工作。