私は、Linux、Windows、および osX の C++ ライブラリの開発者です。osX は匿名の例外を適切に処理しないようになったため、エクスポートする必要があるシンボルを明確にマークすることを検討しました。これらの説明に続いて、 2 つのマクロを定義しました:FOO_API
およびFOO_LOCAL
シンボルをマークするため。今、私は次の問題を抱えています:
各クラスを独自のファイルで定義します (1000 以上の長いファイルは必要ないため)。クラスA
がライブラリでのみ使用されている場合は、 でマークするのが理にかなっていFOO_LOCAL
ます。しかし、クラスB
にタイプ のプライベート メンバーがありA
、クラスB
がFOO_API
である場合、コンパイラの警告が表示され、リンクが失敗します (シンボルが見つかりません)。これは、これらのエクスポート属性の要点全体に反しているようです。それで、それはどうあるべきですか?class FOO_LOCAL A {...}
Is this right?のようなものでクラスをマークします。
すべてのプライベートメンバーをローカルにする方法もありませんか? (それらは非公開であるため、直接アクセスすることは想定されていません) これにより、マーキングプロセスが面倒ではなくなります...
最後に、たとえば例外クラスをマークすると、適切にコンパイルおよび実行されますが、シンボル ( nm -C -D my_lib.so
) を表示すると、すべてのシンボルがまだそこにあることがわかります...