11

我刚刚下载了 CLang 源代码,使用 CMake 创建了一个 Visual C++ 10 IDE 工作区,并从 Visual C++ 10.0 (express) 构建了所有内容。

现在我在 hello world 上收到一堆链接器错误:

d:\dev\test> 输入 con >foo.cpp
#include <iostream>
使用命名空间标准;
int main() { cout << "你好,cling-clong 世界!" <<endl; }
^Z

d:\dev\test> clang++ foo.cpp
foo-839435.o:错误 LNK2019:未解析的外部符号 __ZSt4cout 在函数 _main 中引用
foo-839435.o : 错误 LNK2019: 函数 __ZNSt14error_categoryD0Ev 中引用的未解析的外部符号 __ZdlPv
foo-839435.o : 错误 LNK2019: 函数 __ZNSo6sentry 中引用的未解析的外部符号 __ZSt18uncaught_exceptionv
D2Ev
foo-839435.o:错误 LNK2019:未解析的外部符号 ___cxa_rethrow 在函数 __ZNSt8ios_base5clearEib 中引用
foo-839435.o:错误 LNK2019:函数 __ZNSt8ios_base5clearEib 中引用的未解析的外部符号 ___cxa_allocate_exception
foo-839435.o:错误 LNK2019:函数 __ZNSt8ios_base5clearEib 中引用的未解析的外部符号 ___cxa_throw
foo-839435.o:错误 LNK2019:函数 __ZSt15make_er 中引用的未解析的外部符号 __ZSt17iostream_categoryv

那么我能做些什么呢?

4

5 回答 5

4

如果你想在 Windows 上试验 Clang,我建议使用 MinGW 构建版本,就像我在这里提供的那样(或者使用你最喜欢的 MinGW 工具链自己构建它):

您将需要gccclang包(那些没有 linux/mac/cygwin 后缀的包)并将它们解压缩到同一目录。Clang 使用 gcc 链接,并且可以链接到 GCC 的 libstdc++,几乎可以让您访问 C++ 标准库。例外适用于 32 位版本。不过,我对调试信息没有任何运气。

正在努力为 Clang 带来更好的 MS 支持,但这是一项进展缓慢的任务。

于 2011-11-19T15:40:52.203 回答
2

我认为这里有一个误解。

Clang 正在(慢慢地)被教导如何解析MFC 标头。据我所知,François Pichet 是这个项目的一个人,但整个标头文件中只有几个错误(!),很明显,VC++ 解析附带的标准库很久以前就完成了。

但是,这是关于AST生成,而不是代码生成。Clang 当前无法正确生成代码以与 VC++ 库进行交互。不仅名称修改不完整,而且 ABI 仍在塑造中(在过去的 2 个月中,有许多补丁来获得正确的填充/对齐),并且存在一个长期存在的例外问题。

如果您希望在 Windows 上使用 Clang,您应该使用 MinGW 或 MinGW64,请参阅 ruben 的回答。

于 2011-11-19T15:46:35.390 回答
1

与 MinGW gcc 不同,clang 不包含 glibc 库,因此默认情况下,它没有标准库或任何其他库。我不知道如何使用 Visual C++ 标准库,但从您发布的内容中可以清楚地看出,默认情况下它会生成 gcc 之类的符号,因此您需要将它与 glibc 或 newlib 一起使用...

并且您可以使用-Ldirectory.lib 文件(或 .a 用于 glibc)指定库路径,或者将它们放入默认的 clang 搜索路径之一(运行:clang -v -x c++ -fsyntax-only some file以查看它们。)

于 2011-11-19T14:46:07.243 回答
1

仅使用 clang++ 编译 .cpp,然后尝试使用 ld 链接器而不是 MS 链接。为我工作。

于 2013-03-04T12:42:11.220 回答
0

Clang/LLVM 对 Windows 的支持仍然不完美。尝试包括此选项:-Xclang -cxx-abi -Xclang microsoft. 但是,我不确定它是否可以正常工作。

于 2011-11-19T13:35:29.267 回答