3

リンク中にこれらのエラーが発生します。両方のメッセージが同じオブジェクトファイルに関係している必要があります。

CALL16 reloc at 0x5f8 not against global symbol

could not read symbols: Bad value

2番目のメッセージがCALL16エラーが発生する理由のようですが、ファイルは正常にコンパイルされます。

これを修正するためのヒントはありますか?

参考までに、私はMIPSターゲットのクロスコンパイルを行っており、gcc4.1.2を使用しています。

編集:これまでのところ運がない:
使用されているフラグは次のとおりです:-fPIC、-Wl、-rpath、-Wl、-O1

私も成功せずに次のことを試しました:
-mno-explicit-relocs
-mexplicit-relocs
-mlong-calls
-mno-long-calls
-mxgot
-mno-xgot


その間、この時点でソースに戻り、さらに調査します。

4

2 に答える 2

3

あはは!私の同僚のおかげで、問題が見つかりました。

ここに問題がありました:

関数の前方宣言/プロトタイプがありました。

void FooBarIsBest(void);

ファイルの後半で、関数が定義されました。

static void FooBarIsBest(void)
{
    // do the best
} 

ここでの問題は、プロトタイプでキーワード static が省略されていたことです。つまり、まったく新しい関数が定義されているようでした。

CALL16 参照は、再配置可能なコードのために gcc によって使用されます。ファイルのアセンブリ コードは、この関数で CALL16 が使用されていることを示していました...この関数はローカルであるため、これは誤りです。

興味深いことに、このコードは以前のバージョンの gcc (3.2.2) で問題なくコンパイルおよびリンクされていました。別の教訓が学んだ。:)

于 2009-02-07T15:47:14.907 に答える
1

-mlong-calls フラグをコンパイラに試してみてください。

より具体的な MIPS オプションについては、マニュアルも参照してください。

于 2009-02-05T20:29:58.673 に答える