2

...、これのフォローアップ

参照された質問に対する回答から、次のことを学びました。

  • 異なるコンパイラは異なる名前装飾を使用するため、コンパイラ A でビルドされた C++ ダイナミック ライブラリをコンパイラ B でビルドされたプロジェクトで使用することはできません。
  • ライブラリは、プロジェクトに n 個のヘッダーとソース ファイルを含めたり、シンボルをエクスポートしたりする静的保存としてビルドできます。(別のコンパイラで使用するためにライブラリを再構築しても保存されません。)

言われていることを踏まえてSDLを詳しく見てみると、そのリンクには2つのレイヤーがあることに気付きました。私のSDLプロジェクトでは、libSDL.aに対して静的にリンクし、次にlibSDL.aがSDLに対して動的にリンクします。 dll を使用することで、コンパイラごとに異なる .dll バージョンを用意する必要がなくなります。

問題は、これが本当に事実であり、問​​題に対する実行可能な解決策であるかどうか、または何か (そして何が) 不足しているのかということです。

4

1 に答える 1

3

あなたのアプローチは正しいと思います。私はそれをこのように言います:

  • DLL をさまざまなコンパイラで使用できるようにするには、C 関数のみを含める必要があります (これらの関数は、C++ コンパイラを使用してコンパイルできますextern C) 。
  • DLL の場合と同様に、静的インポート ライブラリを使用して、DLL 内の関数を名前でロードするのではなく、直接呼び出すことができます。
  • 通常のインポート ライブラリの代わりに、DLL の C 関数を C++ クラスおよび関数でラップするラッパー ライブラリを使用できます。
于 2009-06-05T15:52:29.930 に答える