C++ ダイナミック ライブラリとのコンパイラ間の非互換性の問題を解決します。
-
12-09-2019 - |
質問
...、のフォローアップ これ.
参照した質問に対する回答から、次のことがわかりました。
- 異なるコンパイラは異なる名前装飾を使用するため、コンパイラ A でビルドされた C++ 動的ライブラリをコンパイラ B でビルドされたプロジェクトで使用できなくなります。
- ライブラリは、プロジェクト内の n 個のヘッダー ファイルとソース ファイルを含めて静的に保存するか、シンボルをエクスポートしてビルドすることができます。(別のコンパイラで使用するためにライブラリを再構築する手間はまだかかりません。)
これまで述べてきたことを踏まえて SDL を詳しく見てみると、そのリンクには 2 つの層があることがわかりました。私の SDL プロジェクトでは、libSDL.a に対して静的にリンクし、次に SDL.dll に対して動的にリンクします。これにより、コンパイラごとに異なる .dll バージョンを使用する必要がなくなります。
問題は、これが本当に事実であり、問題に対する実行可能な解決策であるのか、それとも何か (そして何を) 見逃しているのかということです。
解決
あなたのアプローチは正しいと思います。私ならこう言います。
- DLL をさまざまなコンパイラで使用できるようにするには、C 関数のみが含まれている必要があります (これらの関数は、C++ コンパイラを使用してコンパイルできます)
extern C
) - DLL の場合と同様に、静的インポート ライブラリを使用すると、名前でロードする必要がなく、DLL 内の関数を直接呼び出すことができます。
- 通常のインポート ライブラリの代わりに、DLL の C 関数を C++ クラスと関数でラップするラッパー ライブラリを使用できます。
所属していません StackOverflow