15

llvm-gcc の 64 ビット バージョンがありますが、32 ビットと 64 ビットの両方のバイナリをビルドできるようにしたいと考えています。これにはフラグがありますか?-m32 (通常の gcc で動作) を渡そうとしましたが、次のようなエラー メッセージが表示されます。

[jay@andesite]$ llvm-gcc -m32 test.c -o test
Warning: Generation of 64-bit code for a 32-bit processor requested.
Warning: 64-bit processors all have at least SSE2.
/tmp/cchzYo9t.s: Assembler messages:
/tmp/cchzYo9t.s:8: Error: bad register name `%rbp'
/tmp/cchzYo9t.s:9: Error: bad register name `%rsp'
...

これは逆です。64 ビット プロセッサ用の 32 ビット コードを生成したい!

Ubuntu 9.04 x86-64 に付属する llvm-gcc 4.2 を実行しています。


編集: -v フラグを指定して llvm-gcc を実行したときの出力の関連部分は次のとおりです。

[jay@andesite]$ llvm-gcc -v -m32 test.c -o test.bc
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../llvm-gcc4.2-2.2.source/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr/lib/llvm/gcc-4.2 --enable-languages=c,c++ --program-prefix=llvm- --enable-llvm=/usr/lib/llvm --enable-threads --disable-nls --disable-shared --disable-multilib --disable-bootstrap
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5546) (LLVM build)
 /usr/lib/llvm/gcc-4.2/libexec/gcc/x86_64-linux-gnu/4.2.1/cc1 -quiet -v -imultilib . test.c -quiet -dumpbase test.c -m32 -mtune=generic -auxbase test -version -o /tmp/ccw6TZY6.s

/usr/lib/llvm/gcc-4.2/libexec/gcc を調べて別のバイナリを見つけようとしましたが、そこにある唯一のディレクトリは x86_64-linux-gnu です。次に、適切なオプションを使用してソースから llvm-gcc をコンパイルする方法を検討します。

4

3 に答える 3

8

設定してみてください:

export CFLAGS="-m32"
export LDFLAGS="-m32"

コンパイルする前に...

于 2009-09-24T22:06:04.623 に答える
4

この一連のコマンドを試して、動作するかどうかを確認していただけますか? 理論的には、llvm-gcc に -m32 オプションを指定した場合、これらの手順は llvm-gcc によって実行されるはずですが、正しく機能していない可能性があるため、すべての手順を明示的にしましょう。

llvm-gcc -m32 -emit-llvm test.c -c -o test.bc
llc test.bc -march=x86 -o test.S
gcc test.S -m32 -o test

これは、llvm-gcc が暗黙的に実行する一連の手順 (または類似のもの) である必要がありますが、あなたの場合、何らかの理由で 64 ビット アセンブリを出力し、32 ビット用にアセンブルしてリンクしようとしているように見えます。

于 2009-09-25T15:41:17.110 に答える
3

私は同じ問題を抱えていました.llvm-gccはフラグを無視します.唯一の解決策はllvm-gccから-m32を尊重するclangに切り替えることでした. それか、llvm-gcc 作業用の 32 ビット オペレーティング システムに切り替えます。

于 2009-10-01T01:03:07.240 に答える