コンテンツにスキップ

Autotools/libtool

出典: フリー教科書『ウィキブックス(Wikibooks)』

GNU Libtool は、ソフトウェアプロジェクトにおいてライブラリ(特に共有ライブラリ)の作成や管理を簡素化するためのビルドツールです。異なるプラットフォーム間での共有ライブラリの扱い方の違いを吸収し、一貫性のあるビルド手順を提供します。

役割と目的

[編集]

共有ライブラリや静的ライブラリのビルド・インストール・リンクを標準化し、移植性の高いライブラリを簡単に作成できるようにするのが GNU Libtool の目的です。

背景

[編集]
  • UNIX(BSD UNIX、System V、macOSなど) や UNIX ライクなシステム(Linuxのディストリビューションなど)では、共有ライブラリ(.so.dylib など)のビルド方法やリンク方法がプラットフォームごとに異なります。
  • Libtool は、これらの違いを抽象化し、シンプルなコマンドで共有ライブラリを作成できるようにします。

主な機能

[編集]
  1. 共有ライブラリの生成
    • プラットフォームに適したコマンドを抽象化し、汎用的な方法で共有ライブラリを作成します。
  2. 静的ライブラリの生成
    • 要に応じて静的ライブラリ(.a ファイル)を簡単にビルドできます。
  3. ライブラリのリンク
    • ラットフォームに依存する正しいフラグを使用して、共有ライブラリや静的ライブラリをリンクします。
  4. インストールの簡略化
    • イブラリのインストールプロセスを統一し、インストール場所やシンボリックリンクの設定を簡略化します。
  5. 移植性の向上
    • ラットフォームごとの違いを隠蔽することで、ソースコードを変更せずに異なるシステムでコンパイル可能にします。

基本的な使い方

[編集]

ライブラリを作成する手順

[編集]

Libtool を使用するプロジェクトでは、以下のファイルを準備します:

  • configure.ac(Autoconf スクリプト)
  • Makefile.am(Automake スクリプト)
configure.ac
AC_INIT([myproject], [1.0], [example@example.com])
AM_INIT_AUTOMAKE([foreign])
AC_PROG_LIBTOOL
AC_OUTPUT
Makefile.am
lib_LTLIBRARIES = libexample.la
libexample_la_SOURCES = example.c

ビルドの実行

[編集]

以下のコマンドでライブラリをビルドします:

libtoolize
aclocal
autoconf
automake --add-missing
./configure
make

上記の手順を実行すると、以下のような共有ライブラリが生成されます:

  • FreeBSD: libexample.so
  • macOS: libexample.dylib

Libtool コマンドの主なオプション

[編集]

Libtool は libtool コマンドとして直接使用することも可能です。以下はその主なオプションです:

コマンド 説明
libtool --mode=compile ソースコードをオブジェクトファイルにコンパイル
libtool --mode=link オブジェクトファイルをライブラリにリンク
libtool --mode=install ライブラリをインストール
libtool --mode=clean ビルドの中間ファイルを削除
ソースコードのコンパイル
libtool --mode=compile gcc -c example.c
ライブラリのリンク
libtool --mode=link gcc -o libexample.la example.lo

メリット

[編集]
  1. 移植性の向上
    • さまざまなプラットフォーム(UNIXやUNIXを模倣したシステム)でのライブラリ操作を統一化。
  2. 簡略化
    • 手作業で記述する Makefile やビルドスクリプトが簡潔になり、作業の負担が減少。
  3. 互換性
    • GNU Autoconf や Automake と連携して、構成・ビルド・インストールを一貫して管理。
  4. 複雑な操作の抽象化
    • システムごとに異なるフラグやコマンドを隠蔽し、開発者がビルドプロセスを深く理解していなくても使いやすい。

課題

[編集]
  1. 学習コスト
  2. 小規模プロジェクトには過剰
    • 小規模プロジェクトや単純なライブラリでは、手作業で共有ライブラリを管理するほうが効率的な場合も。
  3. ツールチェーンの複雑性
    • Libtool 単体ではなく、他の Autotools ツールと連携する必要があり、依存関係が増える。

まとめ

[編集]

GNU Libtool は、プラットフォーム間で共有ライブラリや静的ライブラリの作成・管理を統一化するためのツールです。特に移植性を重視したプロジェクトにおいて威力を発揮し、Autoconf や Automake と連携することで、標準化されたビルドプロセスを実現します。ただし、ツールチェーン全体を理解する必要があるため、学習コストは無視できません。