2009-05-13 7 views
4

私は通常Java開発者ですが、今はLibCurlを使用するC++ライブラリを作成しています。そして、私はC++世界では非常に気付いていません!C++ライブラリにはLibCurlが必要です - アプリケーションのユーザーにはlibcurlが必要ですか?

私が書いているのは、他の開発者(私たちのAPIにアクセスするためのクライアントコード)で使用するためのライブラリです。

エンドユーザーはlibcurlをインストールする必要がありますか、または何らかの形でこれをEXEに組み込んだりパッケージ化したりできますか?

実際には同じことが起こります。私はライブラリでQTを使用する可能性があります。これをインストールする必要がありますか?私はそれが動作する方法を推測しているのはもちろん、開発者はそれを必要とするだろうが、一度バイナリにコンパイルする必要はない?あなたはすべてに沿ってJARファイルを必要とするJava ...

任意の助け乾杯、 アラン

答えて

3

libcurlを静的にリンクすると、 -userはコンパイル時に直接実行可能ファイルにリンクされるため、libcurlは必要ありません。

libcurlを動的にインクルードすると、エンドユーザはlibcurlをシステムにインストールし、共有オブジェクトライブラリとして利用できるようにする必要があります。

しかし、あなたは別の場所にいます。他の開発者が使用するためのライブラリを作成しています。したがって、エンドユーザーは実際にエンドユーザーではありません。このようなシナリオでは、libcurlと動的にリンクする方が「良い」方法です。

静的にリンクした場合、ライブラリはlibcurlライブラリのコピーをそのコードにカプセル化します。今あなたのライブラリを使用している開発者がlibcurlに対して静的にリンクされている他の10のライブラリも使用しているとします。その開発者は、基本的に、最終製品にlibcurlを10個コピーする予定です。これはあまり効率的ではないので、ライブラリを開発するときは、依存関係との動的なリンクが優先されます。しかし

...

開発者がlibcurlのを必要とするが、これらのライブラリのいくつかは、静的リンクは有用であろう他の人よりも、特定の古い/新しいバージョンを必要とする10種類のライブラリを使用している場合。

私はその以前のバージョンではlibcurlのためにリンクされ、C++でのクローズドソースのアプリケーションを書いた...

+0

しかし、動的にリンクする場合、コードが異なるバージョンのlibCurlで動作することを確認する必要があります。そうでなければ、別のlibに特定のバージョンが必要な場合にユーザーに問題があります –

2

多くのライブラリを使用することができますいずれかstaticallyまたはdynamicallyがリンクとは異なり。 Curlはその1つです(例えばthis messageを参照してください)。QTはかなり大きいので、可能な限りQTを動的にリンクする必要があります。statically linked

静的リンクと動的リンクの違いは、静的リンクがアプリケーションのオブジェクトコード内にライブラリを含むことです。動的リンクを使用すると、アプリケーションはインストールされているシステムからオンデマンドでライブラリにアクセスします。

0

に役立ちます願っています。

すべてのLinuxバージョンに異なるlibcurlがあるため、これは間違いです。 glibcとlibstdC++よりもバージョン間の互換性がはるかに低くなっています。私はアプリケーションでlibcurlライブラリを配布したくなかった。

私は単純なニーズがありました。そこで、代わりにsystem()を使用してカールを呼び出すアプリケーションを書き直しました。これはLinuxのすべてのバージョンで機能しました。

関連する問題