Linux GCC 2.95.2 で構築された古い静的ライブラリを再利用しようとしています。32 ビット Ubuntu ディストリビューションの最新のコンパイラ (GCC 4.6) を使用しています。ライブラリは C++ で書かれています。クラスにカプセル化された関数とのリンクに問題があります。
シンボルのネーミングが変わったと思います。
http://www.qnx.com/developers/docs/6.3.2/momentics/compatibility/about.html#C++_code : GCC 2.95.3 (6.2.1 または 6.3 から) と GCC 3.3.5 では異なるC++ ABI とは異なる名前マングリングを持っています。その結果、GCC 2.95.3 でビルドされた C++ バイナリ (オブジェクト、実行可能ファイル、ライブラリ) を GCC 3.3.5 でビルドされたバイナリとリンクすることはできません。
ld のエラー出力は次のとおりです。
`foo1::Bar()' への未定義の参照 (クラス foo1; メンバー Bar)
ツール mn を使用すると、シンボルを読み取ることができます。一致するシンボルは別の方法で命名されます。
Bar__4Foo1
質問: ライブラリ ファイル内のシンボルの名前を変更する方法はありますか? または、古い命名形式を受け入れるように ld を強制できますか?