私は、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) を表示すると、すべてのシンボルがまだそこにあることがわかります...