プラグインライター用のC++インターフェイスの一部としてSTLオブジェクトを使用するアプリケーションがあります。共有ライブラリとSTLオブジェクトとのGCC互換性
互換性のための最良の選択肢は、代わりにCインターフェイスを使用することでしたが、現在実現可能ではないことがわかります。
私は、libstdC++のGCC 3.4から4.8までのすべてがABIの点で互換性が高いことを知っています。
たとえば、GCC 4.1でコンパイルして、プラグインベンダーがGCC 4.7でコンパイルしたコードを書き込んだ場合、コーナーケースはすべて、GCC 4.7以降に対応するlibstdC++バージョンを持つプラットフォーム上でうまくいくでしょう。 が提供されています.STLの使用方法は.so専用です。外部の.soインターフェイスは純粋なCを使用していますが、悲しいことに私には当てはまりません。
私は、プラグインインターフェイスの一部として使用されるSTLクラスに関して、どのようなケースがあるのか不思議です。同じコンパイラバージョン(例えば4.1と4.8)でコンパイルされていない共有オブジェクト間でSTLオブジェクトを安全に渡すことはできますか?そして、人々が異なるコンパイラオプションを使用する場合、テンプレートのコンパイル方法や解決方法に関しては気をつけておく必要がありますか?
問題があると思われます。しかし、GCCの人々によって行われたシンボルバージョンマジックが何らかの形でこの作業を行う可能性があります。
この質問では、私はpre-C++ 11のコンパイルとリンクに興味があります。私はGCCを使ってLinuxとMac OS Xだけに興味があります。
人が失敗するのをやめようとしない限り、うまくいくはずです。 –
@marcフィードバックをいただきありがとうございます。何かもっと参考になるリファレンスやリンクを提供することができます(またはこれに依存するプロジェクトかもしれません)。 – Rob
しかし、gcc> = 5.0の場合、[ABIを変更した]ので、必ずしも動作しません(https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html) – Walter