叮当"hello, world!"窗口中的链接错误

clang "hello, world!" link errors in windows

本文关键字:错误 窗口 链接 hello world 叮当      更新时间:2023-10-16

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

现在我在hello world:

上得到了一堆链接错误<>之前d: 开发 test>输入con>foo.cpp# include & lt; iostream>使用命名空间std;Int main() {count <<"你好,黏黏的世界!"& lt; & lt;endl;}Z ^d: 开发 test>铿锵声+ + foo.cppfoo - 839435。0:错误LNK2019:未解析的外部符号__ZSt4cout在函数_main中引用foo - 839435。0:错误LNK2019:在函数__ZNSt14error_categoryD0Ev中引用的未解析的外部符号__ZdlPvfoo - 839435。0:错误LNK2019:在函数__ZNSo6sentry中引用的未解析的外部符号__ZSt18uncaught_exceptionvD2Evfoo - 839435。0:错误LNK2019:在函数__ZNSt8ios_base5clearEib中引用的未解析的外部符号__cxa_rethrowfoo - 839435。0:错误LNK2019:在函数__ZNSt8ios_base5clearEib中引用的未解析的外部符号__cxa_allocate_exceptionfoo - 839435。0:错误LNK2019:在函数__ZNSt8ios_base5clearEib中引用的未解析的外部符号__cxa_throwfoo - 839435。0:错误LNK2019:在函数__ZSt15make_er中引用的未解析的外部符号__ZSt17iostream_categoryv之前

那么我能做些什么呢?

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

    32位
  • 64位

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

正在为Clang提供更好的MS支持,但这是一个缓慢的任务。

我想这里有一个误解。

Clang正在(慢慢地)学习如何解析 MFC头文件。据我所知,franois Pichet在这个项目上是独自一人,但整个头文件中只有几个错误(!),显然vc++解析附带的标准库很久以前就完成了。

然而,这是关于AST生成,而不是代码生成。Clang目前无法正确生成与vc++库交互的代码。不仅名称不完整,而且ABI仍在成形中(在过去的2个月里已经有许多补丁来获得正确的填充/对齐),并且存在一个长期存在的问题。

如果你想在Windows上使用Clang,你应该使用MinGW或MinGW64,参见ruben的回答

与MinGW gcc不同,clang不包含glibc库,因此默认情况下,它没有标准库或其他任何东西。我不知道如何使用Visual c++标准库与它,但它很清楚,从你的帖子,默认情况下,它产生像gcc的符号,所以你需要使用它与glibc或newlib…

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

使用clang++只编译。cpp,然后代替MS link try ld link。

Clang/LLVM对Windows的支持还不完善。尝试包含这个选项:-Xclang -cxx-abi -Xclang microsoft。但是,我不确定它是否正确工作。