提问人:Kay Verbruggen 提问时间:12/29/2018 更新时间:12/30/2018 访问量:134
链接标准库 MSVC 失败,MinGW 工作正常
Linking standard library MSVC fails, MinGW works
问:
所以我有以下 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 文件。如果我尝试链接标准库(用于 put 函数),它可以正常工作,请使用 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
我无法弄清楚我在这里错过了什么,希望这里有人可以提供帮助。
答:
2赞
Kay Verbruggen
12/30/2018
#1
所以我终于设法找到了问题,尽管我仍然不确定为什么它不起作用。对我来说,解决方案是链接 ucrt.lib,它是 C 运行时库的不同版本。但是在MSDN上,他们表示任何版本都可以与puts一起使用。我通过在 Visual Studio 中用 C 语言制作一个小的“hello world”并打开 /VERBOSE:lib 来查看它们链接的内容来解决这个问题。
评论
0赞
Frank C.
12/31/2018
这就是为什么我说要找出位置,我知道它确实移动到了某个地方,但不记得是哪个库。很高兴你找到了它。
评论
_puts
puts