私はclang-3.5
を使って幸せにmusl libcのビットコードバージョンを構築しました。そして は良いスタンドアロンの実行可能ファイルを生成するためにその結果を使用しています。clang-3.8とcompiler-rt vs libgcc
clang-3.8
での最近の試みはそれほど幸せではありません。 ビットコードclang-3.8
私はビットコードを汚染見つける機能の典型的な例は、mulxc3
、mulsc3
、およびmuldc3
ある
compiler-rt/lib/builtins
で定義された関数を使用して生成しているようです。私はlibgcc
、またはそれが何であるかの明確なアイデアがあれば、llvmの代替案とリンクすることでこれを解決できます。私はむしろ問題が最初に起こるのを防ぐだろうが。
私はrtlib=compiler-rt
などのようなフラグについては言及しましたが、その件に関する貴重な資料はほとんど見つかりませんでした。
ここにいくつかの簡単な質問があります。
それが放出されるビットコードで
compiler-rt/lib/builtins
を使用してからclang
を防ぐことは可能ですか?またはそうでない場合llvmは私が使用できるlibgccのバージョンを生成しますか?実際には私は おそらくそれのビットコード版を構築するだろうが、それはポイントのほかにあります。
これに関するいくつかのガイダンスを聞くのが大好きです。
を追加しました2016年12月8日:だから私は、彼らが望むなら 人々が再現することができ、特定のワークフローに私の問題を説明します、または、より多くの可能性が高い、ちょうど私が愚かであること午前どこ指摘。
ので、チェックアウトすることから始める:あなたは
WLLVM_CONFIGURE_ONLY=1 CC=wllvm ./configure --target=LLVM --build=LLVM
make
cd lib
extract-bc -b libc.a
(ここでは、私はUbuntuの14.04で打ち鳴らす-3.8を使用しています)します
とREADME.toの指示をコンパイル従ってください単純な実行可能ファイルのビットコードも必要です。ここでnweb.cを使用します。
clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb
このワークフローは打ち鳴らす-3.5のためではなく、打ち鳴らす-3のためにスムーズに行く:
wllvm nweb.c -o nweb
extract-bc nweb
今、私たちのようなことを行うことができます。@ポール・ブラナンが指摘するように、我々は
clang -static -nostdlib --rtlib=compiler-rt nweb.bc libc.a.bc crt1.o libc.a -o nweb
を試みることができる
clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb
/tmp/libc-f734a3.o: In function `cpowl':
libc.a.bc:(.text+0xbb9a): undefined reference to `__mulxc3'
/tmp/libc-f734a3.o: In function `cpowf':
libc.a.bc:(.text+0x38f7d): undefined reference to `__mulsc3'
/tmp/libc-f734a3.o: In function `csqrt':
libc.a.bc:(.text+0x78fc3): undefined reference to `__muldc3'
/tmp/libc-f734a3.o: In function `cpow':
libc.a.bc:(.text+0xafafc): undefined reference to `__muldc3'
clang-3.8: error: linker command failed with exit code 1 (use -v to seeinvocation)
をしかし、私が得るので、私はおそらく、愚かされています場所です::8我々が得る
clang-3.8: warning: argument unused during compilation: '--rtlib=compiler-rt'
私がそれをリンクまたはコンパイルフラグとして使用するかどうかは関係ありません。
私は質問に対する答えはわかりませんが、このバグレポートは関連していると思います:https://llvm.org/bugs/show_bug.cgi?id=16404 BTW、リンクは--rtlib = compiler-rtは__muloti4を探している私のリンクの問題を解決しましたが、libgccとリンクしていませんでした。 –
tip @ paul-brannanのおかげで、 'can-o-wormish'に見えます。まだ私はmidasタッチを持っていないようです。私は人々が私の問題を複製し、約束された土地に私を看護することができるようにフォローアップを掲示します。 –
私の質問に答えることはできませんが、関連性があるように見えるので、私はこれをここに追加しています。 [clangでGNUフリーの実行ファイルを作る](https://blogs.gentoo.org/gsoc2016-native-clang/2016/05/31/build-gnu-free-executables-with-clang/) –