6

組み込みの powerpc (e500v2) プラットフォームで作業しています。gcc 4.6.3 と eglibc 2.13 でクロス コンパイルをコンパイルしています。コンパイルされてターゲットにロードされるswigライブラリがあります。Python にロードすると、トレースバックで次のエラーが発生します。

ImportError: /opt/load/lib/libISSDcn.so: R_PPC_REL24 relocation at 0x0ddc99c0 for symbol `longjmp' out of range

以前にこのライブラリに苦労したことがあります。ターゲットのpython 2.5から2.7に移行しています。このライブラリを最初にコンパイルしようとしたとき、使用したフラグに応じて、コンパイル時に再配置エラーまたはオペランド範囲外エラーが発生しました。gcc 4.6.3 に切り替えてビルドできるようになりましたが、ロード時にこのエラーが発生します。

エラーを理解しようとしていますが、これまでのところ、それが何を意味し、どのように修正するかについてはわかりません。何らかの理由でシンボルが見つからないことはわかりましたが、その理由や修正方法がわかりません。

4

1 に答える 1

7

再配置は、24 ビットのR_PPC_REL24相対オフセットに使用されます。このタイプの再配置は、動的再配置テーブルには表示されません (ライブラリは 16 MiB 以上離れたアドレスにロードできるため、これらは、ロード可能なオブジェクト間の参照ではなく、ロード可能なオブジェクト内の参照を意味します)。

デフォルトでは、完全な 32 ビット アドレスを使用するよりもはるかに小さく高速なコードであるため、コンパイラは可能な限りこれらの再配置を生成しますが、動的リンクでは、外部から見えるシンボルと生成される PIC/GOT エントリに完全なアドレスを使用する必要があります。

-fPICフラグがライブラリの構築に使用されたこと、およびリンカが共有オブジェクトを構築していることも通知されたことを確認します (通常は-sharedまたはを介し​​て-Bshared)。

于 2012-10-12T16:25:20.450 に答える