C では、ライブラリをリンクし、関連するヘッダー ファイルをインクルードするだけで、それを使用したい任意のクライアント コードから呼び出すことができる共有ライブラリを作成できることに慣れています。ただし、 C++ の ABIは揮発性が高く、非標準であるため、他のソースから関数を確実に呼び出すことはできないと読んだことがあります。
これにより、C と同じくらい普遍的な真の共有ライブラリを作成することは C++ では不可能であると私は信じるようになりますが、実際の実装はそうではないことを示しているようです。たとえば、Node.js は非常に単純なモジュール システムを公開しており、関数を使用してプレーンな C++ 関数 ( なしextern "C"
) を動的にエクスポートできNODE_SET_METHOD
ます。
C++ API のどの要素を安全に公開できますか? また、C++ コードが C++ コードの他の部分とやり取りできるようにする一般的な方法は何ですか? C++ クラスを公開できる共有ライブラリを作成することは可能ですか? それとも、ABI に一貫性がないため、プログラムごとにこれらのクラスを個別に再コンパイルする必要がありますか?