3

我已经使用 Microsoft C++ 成功构建了 Clang,我正试图让它编译一个 hello world 测试用例;它会生成一个目标文件,与标准库链接是剩下的绊脚石:

hello-202520.o : error LNK2019: unresolved external symbol _printf referenced in function _main
LINK : error LNK2001: unresolved external symbol _mainCRTStartup

前几年有评论说 Clang 根本没有做 Windows 链接,但我觉得那些已经过时了,而且它现在确实似乎能够生成 Windows 格式的目标文件:

clang -c hello.c
ren hello.o hello.obj
link hello.obj

...不会出错,因此文件格式似乎是正确的,但仍然会出现未解决的外部符号错误。可能的猜测是微软编译器在其输出目标文件上标记了它们需要链接的标准库,而 Clang 没有,并且目视各个目标文件的十六进制转储似乎证实了这一点并给出了提示要使用的链接器命令行:

link /defaultlib:libcmt /defaultlib:oldnames hello.obj

在这个阶段我寄予厚望,但可惜它仍然给出了相同的未解决的外部符号错误。

我还缺少什么?

4

1 回答 1

8

原来 Clang 默认生成 32 位代码,但我使用的是 64 位 MSC,并且随着移动到 x64,C 符号上的前导 _ 已被删除,因此在 clang 命令行上指定 -m64 就可以了。

于 2013-08-26T21:39:55.710 回答