sparc9 および sparc10 システムに gcc 3.4.6 をインストールしました。sparc10 で共有オブジェクト (sparc9 でビルド) を使用しようとすると、非互換性の問題が発生します。sparc9 システムで同じ共有オブジェクトを使用しても問題はありません。メイクファイルからのスニペット:-
LIB=-L/usr/lib/sparcv9 -L/usr/local/lib/sparcv9 -L/lib/sparcv9
gcc -m64 -shared -fPIC -o myapi.so.1 myapi.o $(LIB) -lc -lstdc++ -luuid
sparc10で次のようになりました:-
ldd -d /home/myapi.so
libstdc++.so.6 => /usr/local/lib/sparcv9/libstdc++.so.6
symbol not found: _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode (./myapi.so)
上記の出力では、正常に見える他の依存関係をスキップしました。
次に、上記の参照されていないシンボルについて、/usr/local/lib/sparcv9 の libstdc++.so.6 に対して「nm」を実行したところ、次の結論が得られました。
V9---> _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode
V10--->_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode
注意深く見ると、sparc9 と sparc10 の修飾名シンボルの違いがわかります... "ExSt12" v/s "ElSt12"。
同様に、sparc10 で myapi.so をビルドすると、V9 と V10 のシンボルの不一致が原因で、sparc9 で失敗します。
私が何かを見逃しているかどうかについて、誰かが私に役立つヒントを教えてもらえますか? または、V9 にパッケージをインストールする必要がありますか。V9 で構築された共有オブジェクトは V10 で動作するはずです。
V9 の libstdc++.so.6 のサイズが V10 と異なることを付け加えておきます。V9 には SMCgcc があり、V10 には SUNWgccruntime と SMCgcc の両方があります。