CMakeを利用してC++から共有ライブラリを作成する方法
本ページではCMakeを利用してC++のソースファイルから共有ライブラリ (Linuxでは .so 、 Windowsでは .dll)を作成する方法について解説します。
方法#
add_library の引数に SHARED を渡します。
add_library(
${PROJECT_NAME}
SHARED ${SOURCE_FILES})
説明#
add_library#
add_library はプロジェクトに対してライブラリを追加するコマンドです。コマンド名だけ見ると外部のライブラリを追加しそうに見えますが、プロジェクトでビルドする対象のライブラリを追加するコマンドです。
構文は以下の通りです。
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[<source>...])
name にライブラリの名称を入れ、 source の個所にソースコードを指定すればよいという基本的な構造は add_executable と同じです。
ライブラリには幾つか種類があるため、注意が必要です。本コマンドで指定できるものについて以下にまとめてみました。
名前 | 意味 |
---|---|
STATIC | 静的ライブラリを生成する際に指定 |
SHARED | 動的ライブラリを生成する際に指定 |
MODULE | 実行時にリンクされるライブラリを生成する際に指定 |
STATIC (静的ライブラリ)#
静的ライブラリはよく *.lib という名称で作成されているファイルです。中身はオブジェクトファイルがアーカイブされたもののようです。
静的ライブラリはプログラムの生成時にリンクして利用します。そのため、プログラムをビルドする環境に該当するライブラリが存在している必要があります。
MODULE (モジュール)#
こちらはあまり情報が見つかりませんでしたが、実行時にのみ参照されるライブラリを作成する際に利用されるようです。
マニュアルには dlopen で開くことができるようなファイルを作成する、という文があるのですが SHARED で作成したライブラリも dlopen などのライブラリを開くためのコマンドで利用することができます。
大きな違いとしては、幾つかのプラットフォームでは MODULE 形式で作成したライブラリはビルド時にリンクすることができないことがある、という点があるようです。
おそらくあまり利用する機会はないのではないかと思います。
関連する記事