Clang,Microsoft链接器和标准库

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

我原本对此有很高的期望,但遗憾的是,它仍然显示相同的“未解决的外部符号错误”。

我还缺少什么?


仅为了保持清醒,硬链接库应该在目标文件之后吗?(顺便猜测一下) - WhozCraig
1个回答

8

事实证明,Clang默认生成32位代码,但我正在使用64位MSC,并且随着移动到x64,C符号前导_已被删除,因此在clang命令行上指定-m64即可完成任务。


2
对我来说情况恰好相反。我必须向clang提供-m32参数。 - Andrew Brock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接