0

g++ バージョン 2.96 を使用してビルドされたライブラリ ファイルがあります。lib のソース コードは入手できず、元の開発者からのサポートもありません。

最新の g++ バージョン (4.x など) を使用してアプリケーションにリンクしたいと考えています。私が理解しているように、gcc veriosn 3.3 以降、名前マングリング スキームが変更されました。そのため、新しいリンカーは古い lib ファイルのシンボルを認識しません。

私はネットでいくつかの調査を行い、objcopy、objdump、c++filt、nm などのツールを調査し、lib ファイル内のシンボルを手動で見つけてデマングルしようとしましたが、役に立ちませんでした。

それで、新しいコンパイラを使用してリンクできるように、古いバイナリ lib ファイルを新しい名前マングリング スキームに変換する方法 (またはツール) はありますか?

4

1 に答える 1

0

いいえ、これは不可能です。

オブジェクトのレイアウト、例外処理メカニズム、標準ライブラリの実装、仮想関数の仕組みなど、g++ 2.96 と g++ 4.x の間で互換性のないものが他にもたくさんあります。等

古いライブラリのソース コードを入手するか、すべてを g++ 2.96 でビルドするか、古いライブラリを同じ動作をする新しいコードに置き換えます。

于 2015-05-27T09:54:20.717 に答える