2017-06-14 4 views
0

ウィンドウOSにtest.lllibstdc++.aをリンクします。llvm lldを使用してlibstdC++をリンクする方法

私はこのような簡単なテストIRコードを持っています。

@.str = internal constant [14 x i8] c"hello, world\0A\00" 

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 
} 

私はllctest.objtest.llをコンパイルsuccessed。

今、私はlldないGCCとのtest.exeファイルを作りたい、CL

I`veは

lld -flavor link /entry:main /implib:libstdc++.a test.obj

...このコマンドを実行してくださいが、仕事をdosen'tそれは、これを返します。

test.obj: undefined symbol: printf 
error: link failed 

マイLLVMのバージョンは4.0.0で、LLDのバージョン私はGCCを使用Shoud 4.0.0

のですか?お願い助けて。ありがとうございました。

答えて

0

printflibstdc++で提供されていませんので、msvcrtのようなC標準ライブラリにリンクする必要があります。 mainがcrtによって呼び出されるため、
/entry:mainは不要です。
/implibは、お探しのオプションではありません。インポートライブラリの名前をに指定してを生成します。

g++ test.objを使用すると、(clang-cl -c test.llで作成)とmingw-w64-crtが正常にリンクし、実行可能プログラムが作成されます。
clang++ test.ll(これはmsys2のmingw-w64 clangです)は事実上同じです。
-vで呼び出しを確認すると、どのオブジェクトとライブラリがリンクされているかを調べることができます。 clang-cl -fuse-ld=lld-link test.ll libcmt.lib

現在打ち鳴らす-CL(LLVM 4.0)でLLDを使用していないが、動作していないよう:

はまたしてstatic microsoft crtにリンクすることができます。

+0

ありがとうございました!私はそれを行います。 – SilverJun

-1

gccを使用すると、lldには、-lcというオプションがあり、C++標準のlibにリンクするよう指示します。 -flavour linkオプションを削除して、unixyスタイルのインターフェイスを使用する必要があります。

+0

C標準ライブラリではありませんか?また、 '-lc'がウィンドウを動作させることを確信していますか、私が知っているlibcはありません。msvcrtだけです。 – Darklighter

関連する問題