ここに問題があります:GCCでは、すべてのシンボルをエクスポートせずに、共有ライブラリのすべてのtypeinfoシンボルをどのようにエクスポートできますか?
私はデフォルトでシンボルを隠している共有ライブラリを持っています。実際には、-Xlinker --version-script =オプションを使用して、特定のファイル内のシンボルをいくつかエクスポートしますが、残りのすべてを非表示にします。問題は、他の共有ライブラリで定義されている例外をキャッチしようとすると、この共有ライブラリによってtypeinfoが隠されているため、問題が発生するということです。例外クラスは私のコントロール外のオープンソースライブラリで定義されているため、明示的に表示することはできません。また、バージョン・スクリプト・シンボル・ファイルに例外クラスのtypeinfoの名前を明示的にリストしたくないのは、このライブラリを扱う多くの開発者がいるためです。未来。
オープンソースの.hppファイルの前に#pragma GCC可視性プッシュ(デフォルト)を使用しようとしましたが、動作していないようです。シンボルは表示されませんでした。
私はまた、typeinfoシンボルをエクスポートしただけでなく、エクスポートしたくない他のシンボルをエクスポートした-fvisibility-ms-compatを使ってみました。ライブラリにはCとC++の両方のコードがありますので、C++のみのこのオプションでどのように動作するはずです。
私が本当に必要とするのは、すべてのtypeinfoシンボルを表示するオプションです(明示的に表示されていない限り、他のシンボルは非表示にします)。このようなオプションはありますか?
おそらく ' nmのようなものか?ちょうど推測。 –
これは良い方法かもしれません。私はそれについて考えていましたが、私は余分なスクリプト作業が嫌いですが、それは最良の答えかもしれません。あなたの提案をありがとう! –