Связать стандартную библиотеку MSVC не удается, MinGW работает - PullRequest
0 голосов
/ 28 декабря 2018

Итак, у меня есть следующий IR-файл LLVM:

@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
}

Затем я превращаю его в файл .obj, используя llc.Если я пытаюсь связать стандартную библиотеку (для функции 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

Я могуне могу понять, что мне здесь не хватает, и надеюсь, что кто-то здесь может помочь.

1 Ответ

0 голосов
/ 29 декабря 2018

Итак, мне наконец удалось найти проблему, хотя я все еще не уверен, почему она не работает.Решением для меня было связать ucrt.lib, который является другой версией библиотеки времени выполнения C.Но на MSDN они заявили, что любая версия будет работать с путами.Я понял это, сделав небольшой «привет мир» в C в Visual Studio и включив / VERBOSE: lib, чтобы увидеть, что они связывают.

...