如何 link libstdc++ 使用 llvm lld
how to link libstdc++ using llvm lld
我想 link test.ll
和 libstdc++.a
在 window OS.
我有像这样的简单测试 IR 代码。
@.str = internal constant [14 x i8] c"hello, world[=11=]A[=11=]"
declare i32 @printf(i8*, ...)
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
%tmp1 = getelementptr [14 x i8], [14 x i8]* @.str, i32 0, i32 0
%tmp2 = call i32 (i8*, ...) @printf( i8* %tmp1 ) nounwind
ret i32 0
}
我用 llc
成功地将 test.ll
编译为 test.obj
。
现在我想制作 test.exe
文件 lld
而不是 gcc,cl
我试过这个命令,但没有用...
lld -flavor link /entry:main /implib:libstdc++.a test.obj
它return这个。
test.obj: undefined symbol: printf
error: link failed
我的LLVM版本是4.0.0,lld版本是4.0.0
我应该使用 GCC 吗?请帮帮我。谢谢。
使用 gcc 可以,但是 lld 有一个选项 -lc
告诉它 link 到 c++ 标准库。不过,您可能需要删除 -flavour link
选项并使用 unixy 风格的界面。
printf
没有被 libstdc++
提供,你需要 link 到像 msvcrt 这样的 C 标准库。
/entry:main
不是必需的,因为 main
将被 crt 调用。
/implib
不是您要查找的选项。它指定要生成 的导入库的名称。
使用 g++ test.obj
成功 link将您的 test.obj
(使用 clang-cl -c test.ll
创建)发送到 mingw-w64-crt 并创建一个可运行的程序。
clang++ test.ll
(这是 msys2 中的 mingw-w64 clang)实际上是一样的。
您可以使用 -v
检查调用以找出哪些对象和库被 linked。
您还可以通过以下方式 link 到 static microsoft crt:
clang-cl -fuse-ld=lld-link test.ll libcmt.lib
当前不将 lld 与 clang-cl 一起使用(LLVM 4.0)似乎不起作用。
我想 link test.ll
和 libstdc++.a
在 window OS.
我有像这样的简单测试 IR 代码。
@.str = internal constant [14 x i8] c"hello, world[=11=]A[=11=]"
declare i32 @printf(i8*, ...)
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
%tmp1 = getelementptr [14 x i8], [14 x i8]* @.str, i32 0, i32 0
%tmp2 = call i32 (i8*, ...) @printf( i8* %tmp1 ) nounwind
ret i32 0
}
我用 llc
成功地将 test.ll
编译为 test.obj
。
现在我想制作 test.exe
文件 lld
而不是 gcc,cl
我试过这个命令,但没有用...
lld -flavor link /entry:main /implib:libstdc++.a test.obj
它return这个。
test.obj: undefined symbol: printf
error: link failed
我的LLVM版本是4.0.0,lld版本是4.0.0
我应该使用 GCC 吗?请帮帮我。谢谢。
使用 gcc 可以,但是 lld 有一个选项 -lc
告诉它 link 到 c++ 标准库。不过,您可能需要删除 -flavour link
选项并使用 unixy 风格的界面。
printf
没有被 libstdc++
提供,你需要 link 到像 msvcrt 这样的 C 标准库。
/entry:main
不是必需的,因为 main
将被 crt 调用。
/implib
不是您要查找的选项。它指定要生成 的导入库的名称。
使用 g++ test.obj
成功 link将您的 test.obj
(使用 clang-cl -c test.ll
创建)发送到 mingw-w64-crt 并创建一个可运行的程序。
clang++ test.ll
(这是 msys2 中的 mingw-w64 clang)实际上是一样的。
您可以使用 -v
检查调用以找出哪些对象和库被 linked。
您还可以通过以下方式 link 到 static microsoft crt:
clang-cl -fuse-ld=lld-link test.ll libcmt.lib
当前不将 lld 与 clang-cl 一起使用(LLVM 4.0)似乎不起作用。