組み込みデータベースとしてsqlite3を使用するC++でアプリケーションを構築しています。sqlite3のソースは、統合されたソースコードファイルsqlite3.c
と2つのヘッダーファイルとして配布されます。
sqlite3コードをプログラムバイナリに直接リンクすることと、sqlite3を静的ライブラリとしてコンパイルしてそのようにリンクすることの相対的な長所または短所は何ですか?
ダイナミックライブラリとしてsqlite3コードにリンクすることはすでに決めています。
組み込みデータベースとしてsqlite3を使用するC++でアプリケーションを構築しています。sqlite3のソースは、統合されたソースコードファイルsqlite3.c
と2つのヘッダーファイルとして配布されます。
sqlite3コードをプログラムバイナリに直接リンクすることと、sqlite3を静的ライブラリとしてコンパイルしてそのようにリンクすることの相対的な長所または短所は何ですか?
ダイナミックライブラリとしてsqlite3コードにリンクすることはすでに決めています。
それは実際にはあまり違いはありません。
ある種のmakefile環境があると仮定すると、sqlite.cは、何も変更しない場合に1回だけビルドされ、リンカーは静的ライブラリをプラグインするのとほぼ同じ方法でオブジェクトファイルを結合します。
静的ライブラリはプログラムにコンパイルされます。リンクコードはプログラムに直接コンパイルされます。したがって、実際には同じことのようです:)ソースファイルが少なくなるため、静的ライブラリとしてプロジェクトをリンクすると、プロジェクトの管理が容易になる可能性があります。一方、ライブラリのソースファイルをすばやく変更する必要がある場合は、静的ライブラリを再構築する必要はありません。最終的にはあなた次第です。
ライブラリにシンボルを含めずに、ライブラリにsqlite3を含める方法は次のとおりです。
#define SQLITE_API static
#include <sqlite.h>
#include <sqlite.c>
そうすれば、ライブラリのユーザーがリンクする可能性のあるsqliteの他の実装と競合しないことが保証されます。