4

私の質問はthis oneに似ていますが、静的ライブラリに関しても:

複数のコンパイラと 32 ビットと 64 ビットの両方で動作する、Windows/Linux/Os X で適切にビルドされるクロスプラットフォームの C++ ヘッダー ライブラリがあります。ユーザーが zlib または libbz2 をインストールしている場合、ビルド システムは を介し​​てライブラリの一部の機能を有効にします#ifdefs

ユーザーが簡単にインストールできるように、Windows 用の zlib や libbz2 などのライブラリを、バイナリ形式または数回クリックしてインストールできるソースとして出荷したいと考えています。(Linux および Mac Os X では、システム パッケージが実際にほとんどの標準的なインストールで利用できるため、ライブラリを簡単にインストールできます。私が知る限り)。

最終的な解決策では、ユーザーが Visual C/C++ コンパイラ 2005、2008、および 2010 と MinGW を 32 ビットおよび 64 ビット Windows で使用して、zlib および libbz2 に簡単にリンクできるようにする必要があります。現時点および近い将来の C ライブラリのみに関心があります。

ライブラリは個別にビルドする必要があります。それらのビルドをビルド システムに統合したくありません。

私が見る限り、ここには少なくとも 2 つの自由度があります。

  • 静的ライブラリまたは DLL を使用するかどうか。
  • バイナリ ライブラリを出荷するか、ユーザーが独自のライブラリを構築できるようにするか。

もう 1 つのポイントは、ユーザーが自分のプログラムのデバッグ バージョンと最適化バージョンの両方に対してライブラリをリンクできる必要があるということです。私は Windows プログラミングの専門家ではありませんが、インターネットや職場の他の開発者から調べた限りでは、Windows のデバッグ ビルドとリリース ビルドにはこの (異常な?) 違いがあります。どうやら、デバッグ プログラムをリリース ライブラリに対してリンクしたり、その逆をリンクしたりすることはできません。これは正しいです?

(1) C++ コンパイラの依存 C ライブラリを出荷する最良の方法は何ですか? (2) 後で C++ ライブラリも出荷したい場合、ユーザーが各コンパイラでソースからビルドできるようにすることが唯一の実行可能な方法ですよね?

4

2 に答える 2

2

C++ コンパイラの依存 C ライブラリを出荷する最良の方法は何ですか?

完全な解決策はありませんが、少なくとも Visual Studio では、ユーザーが使用すると思われるコンパイラ用の対応するヘッダー ファイルとインポート ライブラリと共に DLL を出荷すると、ユーザーにとって非常に簡単になります。ほとんどのコンパイラには、DLL バイナリからインポート ライブラリを作成するためのツールが用意されていることに注意してください。

ライブラリをソース形式で出荷し、さまざまなコンパイラでビルドするスクリプトを提供することもできます。

後で C++ ライブラリも出荷したい場合、ユーザーが各コンパイラでソースからビルドできるようにすることが唯一の実行可能な方法ですよね?

一般に、C++ のクラスとメソッドをエクスポートする DLL を使用することは非常に悪い考えです。これらはコンパイラに依存する方法でエクスポートされ、サポートされているコンパイラごとに異なる DLL を提供する必要があるからです。C++ ライブラリを扱うときは、次の対策を講じています。

  1. DLL ではなく、静的ライブラリをビルドします。
  2. C++ ライブラリのビルドを自分のプロジェクトのビルドに (たとえば、依存プロジェクトとして) 組み込み、すべてが同じコンパイラによってビルドされるようにします。

私がこの権利を理解している場合、アプリケーションを構築しているのはユーザーであり、ヘッダー ライブラリを提供しているだけです。したがって、この場合、C++ ライブラリをアプリケーションに追加する方法を文書化する必要があるように思われます。そのための最善の方法は、C++ ライブラリをソースからビルドする完全に機能するサンプル アプリケーションを提供することです。少なくとも、ユーザーが使用する可能性がある Visual Studio およびその他のコンパイラをターゲットにします。

幸運を。

于 2011-10-29T17:55:42.243 に答える
1

バイナリ互換性を最大限に高めるには、Windows プラットフォームで C/C++ ライブラリを COM として公開するのが最善の方法です。

COM オブジェクトは、C、C++、および .NET 言語から使用できます

于 2011-10-29T17:23:22.227 に答える