Linker 链接标准库MSVC失败,MinGW工作

Linker 链接标准库MSVC失败,MinGW工作,linker,llvm,llvm-ir,unresolved-external,Linker,Llvm,Llvm Ir,Unresolved External,因此,我有以下LLVM IR文件: @msg = global [24 x i8] c"Hello LLVM!" declare i32 @puts(i8* %string) define void @main() { "entry block": %0 = getelementptr [24 x i8], [24 x i8]* @msg, i32 0, i32 0 %1 = call i32 @puts(i8* %0) ret void } 然后,我使用llc将其

因此,我有以下LLVM IR文件:

@msg = global [24 x i8] c"Hello LLVM!"

declare i32 @puts(i8* %string)

define void @main() {
"entry block":
    %0 = getelementptr [24 x i8], [24 x i8]* @msg, i32 0, i32 0
    %1 = call i32 @puts(i8* %0)
    ret void
}
然后,我使用llc将其转换为.obj文件。如果我尝试链接puts函数的标准库,则可以使用MinGW库:

link /ENTRY:main /DEFAULTLIB:libmsvcrt.a /LIBPATH:"C:\Program Files\mingw-w64\mingw64\x86_64-w64-mingw32\lib" /SUBSYSTEM:CONSOLE /OUT:bin/program.exe bin/program.obj 
但使用MSVC库失败:

link /ENTRY:main /DEFAULTLIB:msvcrt.lib /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64" /SUBSYSTEM:CONSOLE /OUT:bin/program.exe bin/program.obj 

program.obj : error LNK2019: unresolved external symbol puts referenced in function main
bin/program.exe : fatal error LNK1120: 1 unresolved externals

我不知道我在这里遗漏了什么,希望这里的人能帮助我。

所以我终于找到了问题所在,尽管我仍然不知道为什么它不起作用。我的解决方案是链接ucrt.lib,它是C运行时库的不同版本。但在MSDN上,他们表示任何版本都可以使用puts。我在Visual Studio中用C制作了一个小的hello world,并打开/VERBOSE:lib查看它们的链接。

找出put函数在哪个MS库中,它在哪里,并将它添加到您的libpath中。另外,您确定它不是puts vs.puts吗?根据MSDN和其他一些LLVM hello world示例,puts应该是正确的。Puts位于每个版本的C运行时库中,根据MSDN,msvcrt.lib位于该文件路径中。它也是x64,所以这也不应该是问题所在。这就是为什么我说要找出它的位置,我知道它确实移动到了某个地方,但不记得是哪个库。很高兴你找到了。