2011-09-11 7 views
4

に収まらない:リロケーション値は、私はVxWorksの関数のLoadModuleを使用してメモリにコードファイルをロードしようと、それは私にエラーを与えた24ビット

Relocation value does not fit in 24 bits 

私は私のコンパイラで-mlongcallフラグを追加しようとしたが、それは動作しません。

+1

プロセッサアーキテクチャ、正確なloadModule()呼び出し(任意の変数パラメータの定義を含む)、およびモジュールの内容が何であるかを指定する必要があります。 –

答えて

3

PowerPCアーキテクチャで作業する前にこのエラーが発生しています。同様の環境で作業していると仮定すると、問題はシステム内のメモリ量と相対分岐命令の範囲で具体的に行わなければなりません。

Argonne National Labsにはwebpage detailing their experiences with the same issueがあります。次の抜粋は、相対アドレッシング枝の問題について説明します。

The PowerPC relative branch instruction is limited to jumps between +/- 32MB of the current instruction (24 bits = +/- 4M instructions, 4 bytes per instruction = +/- 32MB). Unfortunately the vxWorks kernel gets put into the bottom end of RAM, but it loads all application code at the top end. If the two are separated by more than 32MB (should you have 64MB or more on board) then when it tries to load the application code those calls that use these relative branch instructions to vxWorks routines can't be resolved within 24 bits, and the loader prints the message you're seeing.

この問題に対する修正案は、アルゴンヌ国立研究所の両方が有効になって-mlongcallフラグを使用してロードされたモジュールを再コンパイルすることです。

あなたの最初の質問は、このフラグが問題の修正ではないことを示しました。 gnuフラグは設定されていますが、コンパイラの詳細情報は表示されません。コンパイラのドキュメントをチェックし、-mlongcallフラグが有効であることを確認することをお勧めします。

フラグがサポートされていると仮定すると、これは、自身が-mlongcallフラグでコンパイルされていないリンクライブラリによって引き起こされている可能性があります。 ComplexITの記事でも、QTを使用したPowerPCアーキテクチャでも同様の問題が詳しく説明されています。この問題を解決するためには、QTを含むすべてのライブラリの再構築が必要でした。

3

あなたは -mlongcall を使用したい場合は、あなたのコンパイラは、あなたのアクティブなビルドスペックのためにGNUに設定されていることを確認してください。 WindRiverは独自のコンパイラであるDiabコンパイラも提供していることに注意してください。あなたがDIABを使用したい場合は、そのコンパイラのための同等のフラグをコンパイラです:あなたはワークベンチを使用している場合

-xcode絶対はるか

、あなたが使用しているコンパイラ見る(そしておそらく変更することができます>ビルドプロパティ - - >ビルドサポートと仕様プロジェクトエクスプローラサブウィンドウでプロジェクトを右クリックして、あなたがそう望むならば)を

プロパティを選択します。

このダイアログでは、アクティブビルド仕様という名前のドロップダウンメニューボタンが表示されます。必要なアーキテクチャとコンパイラの組み合わせを選択します。

必要なアーキテクチャとコンパイラの組み合わせが見つからない場合は、プロジェクトを作成するときにそれを選択しなかったか、購入したVxWorksのpkgが付属していない可能性が非常に高いです。

関連する問題

 関連する問題