4

私は通常Java開発者ですが、現在C ++ライブラリを作成しており、LibCurlを使用します。そして、私はC ++の世界ではあまり気づいていません!

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

エンドユーザーはlibcurlをインストールする必要がありますか、それとも開発者はこれをEXEに含めるか、パッケージ化することができますか?

実際には同じことが言えます。ライブラリでQTを使用する可能性がありますが、これをインストールする必要がありますか?私はそれが機能する方法はもちろん開発者がそれを必要とするだろうと推測しています、しかしそれがバイナリにコンパイルされたらそれは必要ではありませんか?ずっとJarファイルが必要なJavaとは異なり...

助けてくれてありがとう、アラン

4

3 に答える 3

3

libcurlを静的にリンクする場合、コンパイル時に直接実行可能ファイルにリンクされるため、エンドユーザーはlibcurlを必要としません。

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

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

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

でも...

開発者がlibcurlを必要とする10の異なるライブラリを使用しているが、それらのライブラリの一部が他のライブラリよりも特定の古い/新しいバージョンを必要とする場合、静的リンクが役立ちます。

お役に立てば幸いです...

于 2009-05-13T07:42:11.437 に答える
2

多くのライブラリは、静的または動的にリンクして使用できます。カールはその1つです(たとえば、このメッセージを参照してください。そうするのが合理的だと思います。QTはかなり大きいので、可能であれば動的にリンクする必要があります。ただし、静的にリンクすることもできます。

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

于 2009-05-13T07:33:09.597 に答える
0

以前のバージョンで libcurl にリンクするクローズド ソース アプリケーションを C++ で作成しました。

Linux のバージョンごとに libcurl が異なるため、これは誤りであることが判明しました。glibc や libstdc++ よりもバージョン間の互換性がはるかに低かった。アプリケーションに libcurl ライブラリを同梱したくありませんでした。

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

于 2009-06-25T02:46:00.463 に答える