2

gcc3 でビルドされた可能性があるライブラリにリンクするアプリケーションを継承しました。または、imagecraft コンパイラを使用することもできます。その情報は天国のビットフィールドに消えてしまい、アプリをリンクするための libXXX.a ライブラリが残っています。libXXX.a を再コンパイルできません。これには、imagecraft や他の場所からの特定の不明なヘッダーが必要なためです。これは、ある時点で私の環境に遍在していた可能性がありますが、現在はどこにも見つかりません。

私の質問は、私のアプリを avr-gcc バージョン 3.4.0 (およびその「特別な」libXXX へのリンク) でコンパイルした結果、動作するバイナリ イメージが得られた場合、他のすべての部分をコンパイルできると期待するのは合理的ですか? avr-gcc 4 を使用した私のアプリ (このアクションには、いくつかの非常に優れた実証済みの利点があります)、libXXX とリンクしても、動作するプログラムを取得できますか?

基本的に、それはすべて次のように要約されます: avr-gcc バイナリは、「avr-gcc 3.something である可能性がある謎のコンパイラ X」と互換性がありますか?

正直なところ、アプリの残りの部分を avr-gcc4 でコンパイルしてライブラリにリンクし、結果が機能することを確認しましたが、どのような副作用や癖に気をつければよいでしょうか?

4

1 に答える 1

2

両方のコンパイラが同じ ABI (Application Binary Interface) を使用している場合、異なるコンパイラ (またはバージョン) からのライブラリのリンクは確実に機能します。

特定のプラットフォームの ABI は通常、そのプラットフォームの支配的なコンパイラによって指定されますが、これは外部仕様を参照することによって行うことができます。
特にプラットフォームがサードパーティのライブラリ/アプリケーションをサポートしている場合、ABI の変更はまれです。ABI の変更は、文字通りすべてを再構築する必要があることを意味するためです。

于 2010-10-28T10:55:58.350 に答える