7

状況は次のとおりです。SPARCサーバーから実行できるバイナリをLinuxマシン(Ubuntu上)からコンパイルできる必要があります。コンパイルしようとしているプログラムは非常に単純です。

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("Testing the SPARC program...");
    return EXIT_SUCCESS;
}

動作させるためにさまざまなコンパイル行を試しましたが、残念ながら何も動作していないようです。

私は伝統的なものを試しました:

 clang -target sparc blah.c -o blahsparc

しかし、これは機能しません。アセンブラーの失敗がたくさんあります。

 /tmp/blah-519e77.s: Assembler messages:
 /tmp/blah-519e77.s:7: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:8: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:9: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:10: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:11: Error: no such instruction: 'save %sp,-240,%sp'
 /tmp/blah-519e77.s:12: Error: no such instruction: 'st %g0, [%fp+2043]'
 ...
 clang: error: assembler (via gcc) command failed with exit code 1 (use -v to see invocation)

私もこれを試しました:

clang -cc1 -triple "sparc-unknown-Linux" blah.c -o blahsparc

欠落しているヘッダーについて不平を言うので、-cc1 を使用する代わりに、-Xclang を使用します。

clang -Xclang -triple -Xclang "sparc-unknown-Linux" blah.c -o blahsparc

ただし、これも「エラー: 不明なターゲット CPU 'x86-64'」が原因で失敗します。これをどこに進めればよいかわかりません。crosstool-ng も使用してみましたが、ほとんど成功しませんでした。

4

3 に答える 3

3

LLVM 3.6.2 で sparc がサポートされるようになりました... T2000 で llvm 3.6.2 をビルドし、clang 3.6.2-r100 を実行できました。C++ のサポートは動作していませんが、htop のような適度に複雑な C アプリケーションを作成しました。

gcc 5.2 を使用して LLVM をコンパイルしましたが、少なくとも gcc 4.9 で gcc 4.7 以上を推奨しましたが、より低いバージョンでも動作するはずです。

コンパイル中に gentoo の LLVM がクラッシュしましたが、llvm ebuild を含む portage ディレクトリに移動し、ビルドを手動で再起動することで再開できました。

cd  /usr/portage/*/llvm/
ebuild llvm-3.6.2.ebuild merge

デフォルトのコンパイラのいくつかをオーバーライドする必要がありました。

CC="clang -target sparc-unknown-linux-gnu" 
CXX="clang++ -target sparc-unknown-linux-gnu" 
CFLAGS="-O2 -pipe"
CXXFLAGS="${CFLAGS}"

これを使用して x86 マシンからビルドできるかどうかはわかりませんが、clang はそれができるはずです。しかし、最悪の場合、これを qemu-system-sparc64 vm または eBay で安く見つけることができるいくつかの実際のハードウェアで実行できる可能性があります (T5xxx ハードウェアは価格が下がり、ブレードは非常に安価です)。

最近、clang 3.8 (まだリリースされていません) に更新し、上記のオプションに加えて -lstdc++ を渡すことで C++ アプリケーションをコンパイルできました。これは、g++ ではなく gcc として呼び出された場合の gcc と同じ動作だと思います。

于 2015-08-13T03:21:00.473 に答える