2011-01-19 12 views
0

私はJava開発者です。私はいくつかのC++コードをいくつかのシステムをrealted呼び出しを行う。このコードはGCCを使ってIntel 32ビットプラットフォームでコンパイルされています(私はmakeファイルを持っています)、通常のIntelベースの32ビットLinuxマシンで正常に動作します。これをMarvell ARMプロセッサ上で動作するLinux OSで実行する必要があります。 Javaで共有オブジェクトをロードすると、次のエラーが発生します。ARMアーキテクチャのC++コードのコンパイル

共有オブジェクトファイルを開くことができません:そのようなファイルやディレクトリはありません(考えられる原因:ARMビットプラットフォーム上での.so IA 32ビットをロードすることはできませんが)

この問題を解決する方法を教えてください。私はGCCのオプションを見て、アーキテクチャを指定するオプションが1つ見つかりました(-march = armv5)。そのオプションではコンパイルできません。

ありがとうございます。

+8

LinuxのARMシステムでは、クロスコンパイラが必要です。 –

+3

http://ymorin.is-a-geek.org/hg/crosstool-ng/にアクセスし、多数のホストおよびターゲットプラットフォームのクロスコンパイラを作成するスイートを提供します – mmmmmmmm

+1

また、crosstool-ngホームページ:http:// ymorin .is-a-geek.org/projects/crosstool – Hasturkun

答えて

4

スイッチ以上のものが必要です。クロスコンパイラが必要です。あなた自身で作ることができますが、おそらく最も簡単な方法は次のとおりです。

  • あなたのボード用の開発ツールを見つけることができます。それはおそらく、あなたがこれらを持っていない場合、あなたはCodeSourcery社

によって自由に提供するもののようなコンパイル済みのクロスコンパイルをインストールしようとすることができるクロスコンパイルツールチェーン

  • を含ん開発キットが付属しています

    あなたのツールチェインの場所を指定する必要があります(arm-none-linux-gnueabi-gccのようなものを探してください)。

    単純なプロジェクトをコンパイルするクロスは自分のMakefileにCC変数をオーバーライドする、そして簡単です:

    -Ofast -mfpu = VFP -mfloat-ABI:ここ

    CROSS = arm-none-linux-gnueabi- 
    CC = $(CROSS)gcc 
    LD = $(CROSS)ld 
    
  • 0

    gccに-mcpu = armv5スイッチを使用してみてください。

    +1

    -mcpuは推奨されていません。 -march = armv5を使用すると、次のエラーが発生します。エラー:悪い値(armv5)for -march = switch – M99

    +7

    ほとんどの場合(このケースが含まれています)、ARM環境をターゲットとするクロスコンパイラが必要で、インテルコードを生成したコンパイラはアームコードをコンパイルする方法も知らないでしょう。 – gravitron

    関連する問題