2009-09-15 31 views
3

私はブーストソースコードから「ブースト」ライブラリを構築しています.2つのオプションがあります。「静的」にビルドするか、「共有」(ダイナミックなど)をビルドします。 どちらが良いアイデアですか?ブースト - 「静的」vs「共有」ライブラリ

私はダイナミック(共有)リンクを好みますが、私はUbuntu Linux上で共有ライブラリを作成しようとしたときに、エラーや警告(コンパイル時に常にエラー、警告、 grrrrrrrr)、コンパイルされているかどうかわかりません。

ありがとうございました。

+0

ここにエラーログを掲載してください。 –

答えて

7

これは主観的です。共有は、依存関係の危険性を伴い、サイズを縮小します。静的は依存関係の問題を解決しますが、サイズは大きくなります。

あなたの目的のために、より速くコードを作成できる方法を構築することをお勧めします。

+2

静的ライブラリと動的ライブラリの両方に外部依存関係がある場合があります。 – user48956

2

静的ライブラリは、プログラムにコンポーネントを動的に読み込む必要がない場合に使用します。 exeファイルにコンパイルされます。
共有ライブラリはランタイムにロードされ、通常はプラグインまたはエクステンションに使用されます。
これは、プログラムの起動時にboost共有ライブラリをロードすることが多いため、静的ライブラリがより優れています。
なぜ共有ライブラリを好むのですか?

4

ほとんどの場合、静的ライブラリに比べて共有ライブラリを使用したいと考えています。共有ライブラリを使用する主な利点は、ライブラリが更新された場合、共有ライブラリを新しいバージョン(バイナリ互換性を前提としている)に置き換え、アプリケーションを再コンパイルせずに改善された実装の利点を得ることができることです。さらに、共有ライブラリを使用すると、複数のプログラムがそれらを使用している場合には、領域が節約されます。

依存関係の問題については、特定のバージョンの共有ライブラリとリンクすることも、共有ライブラリをプログラム固有の特別な場所に配置することもできます。共有ライブラリに関連する柔軟性を提供します。共有ライブラリより静的ライブラリを選択する理由であってはなりません。私は実際には、静的ライブラリを使用する方が共有ライブラリを使用するよりも優れている典型的なデスクトップ、ラップトップ、またはサーバマシン上で、単一のインスタンスを思いつくのは難しいです。

P.S.あなたがUbuntu LinuxにBoostをインストールしようとしているなら、 "sudo apt-get install libboost1.37-dev"を実行してください。 Boostの依存関係のすべてをインストールしなかったので、おそらくエラーが発生していました。これらは自動的にダウンロードされ、Ubuntuのapt-getパッケージマネージャを使用してインストールするとインストールされます。また、ソースからビルドするよりも、ソフトウェアパッケージをインストールするためにOSパッケージマネージャを使用する方が一般的に優れています。たとえば、パッケージシステムのバージョンのBoostを使用すると、パッケージマネージャのバージョンのBoostを使用する他のUbuntu Linuxデプロイメントでソフトウェアが円滑に実行される可能性が高くなります。

P.P.S. BoostはC++のいくつかの非常に高度な機能を使用します。それはC++を限界まで押し込んでいます。 Boostをコンパイルするときに警告が表示されることは珍しくありません。実際、私はBoostをさまざまなオペレーティングシステム上でかなり多く構築していますが、警告がないときは思い出しません。

+0

コンパイルされたバイナリを配布しているマシンの典型的な基本インストールの一部ではないライブラリを使用している場合は、共有ではなく静的にリンクしたい場合があります。ライブラリを静的にリンクするということは、パッケージをターゲットマシンにインストールする必要がないことを意味します。 –

2

LinuxでBoost C++ライブラリを使用するには、共有リンクを使用することをお勧めします。すでに開発用に設定されているUbuntu Linuxボックスでは、エラーが発生しないはずです。コンパイルの警告が必要です - さまざまな考え方、技術、時間制約の問題があります。定期的にリリースされたテストではUbuntuを扱っているので、作成したライブラリの機能については心配しません。もし.soがあればうまくいくはずです。

関連する問題