使用clang-cl进行编译,但链接无法找到基本的libc符号

时间:2015-01-07 20:13:23

标签: clang msvc12

对于编译为LLVM IR的我的语言(Runa),我正在尝试启用到Windows的编译。我想启用与MSVC编译的东西的链接,所以我想使用MSVC目标三元组。我安装了MSVC社区2013,并有一个cmd.exe窗口,我在其中运行了附带的vcvars32.bat脚本,因此已将一堆MSVC内容添加到PATH。但是,在尝试编译时,我收到以下链接器错误:

hello-163edf.obj : error LNK2019: unresolved external symbol malloc referenced in function runa.malloc
hello-163edf.obj : error LNK2019: unresolved external symbol free referenced in function runa.free
hello-163edf.obj : error LNK2019: unresolved external symbol memcpy referenced in function runa.memcpy
hello-163edf.obj : error LNK2019: unresolved external symbol write referenced in function runa.unhandled
hello-163edf.obj : error LNK2019: unresolved external symbol exit referenced in function runa.clean
hello-163edf.obj : error LNK2019: unresolved external symbol _Unwind_RaiseException referenced in function runa.raise
hello-163edf.obj : error LNK2019: unresolved external symbol snprintf referenced in function float.__str__
hello-163edf.obj : error LNK2019: unresolved external symbol strlen referenced in function uint.__str__
hello-163edf.obj : error LNK2019: unresolved external symbol __chkstk referenced in function str.__eq__
hello-163edf.obj : error LNK2019: unresolved external symbol strncmp referenced in function str.__eq__
hello-163edf.obj : error LNK2001: unresolved external symbol _fltused

我理解关于_Unwind_RaiseException的那个,可能不适合这个目标,但我不清楚为什么找不到像malloc()这样的基本libc的东西。

2 个答案:

答案 0 :(得分:1)

通过在编译器调用结束时添加/link msvcrt.lib来解决大部分问题。

答案 1 :(得分:0)

取决于您的生成过程和Visual Studio的版本,您可能需要msvcrt,vcruntime和ucrt。有关更深入的说明,请参见这篇文章:https://devblogs.microsoft.com/cppblog/introducing-the-universal-crt/