Manpages

名 前

libtool − ラ イ ブ ラ リ の コ ン パ イ ル ・ ビ ル ド ・ イ ン ス ト ー ル ・ ア ン イ ン ス ト ー ル を す る

書 式

libtool [−n] [−−config] [−−debug] [−−dry−run] [−−features] [−−finish] [−−mode=MODE] [−−quiet] [−−silent] [MODE−ARGS...] リ ン ク モ ー ド : [−lNAME] [−o OUTPUT−FILE] [−LLIBDIR] [−R LIBDIR] [−all−static] [−avoid−version] [−dlopen FILE] [−dlpreopen FILE] [−export−dynamic] [−−export−symbols FILE] [−−export−symbols REGEX] [−−module] [−no−undefined] [−release RELEASE] [−rpath LIBDIR] [−static] [−version−info CURRENT[:REVISION[:AGE]] 実 行 モ ー ド : [−dlopen FILE]

libtool [−−features] [−−help] [−−version]

説 明

libtool は 静 的 ラ イ ブ ラ リ や 共 有 ラ イ ブ ラ リ の コ ン パ イ ル ・ リ ン ク ・ イ ン ス ト ー ル ・ ア ン イ ン ス ト ー ル の 複 雑 さ を 簡 略 化 す る 。 異 な る プ ラ ッ ト フ ォ ー ム そ れ ぞ れ で 、 完 全 な 機 能 を 統 一 的 な イ ン タ ー フ ェ ー ス を 介 し て 使 用 す る こ と が で き 、 プ ラ ッ ト フ ォ ー ム 固 有 の 厄 介 な 癖 は プ ロ グ ラ マ ー か ら 隠 蔽 さ れ る 。

libtool は コ ン パ イ ル ・ 実 行 ・ リ ン ク ・ フ ィ ニ ッ シ ュ ・ イ ン ス ト ー ル ・ ア ン イ ン ス ト ー ル と い う 6 つ の モ ー ド で 動 作 で き る 。 コ ン パ イ ル モ ー ド コ ン パ イ ル モ ー ド の 場 合 、 MODE−ARGS は 標 準 的 な オ ブ ジ ェ ク ト フ ァ イ ル を 作 成 す る た め に 使 わ れ る コ ン パ イ ラ コ マ ン ド で あ る 。 こ れ ら の 引 き 数 は C コ ン パ イ ラ の 名 前 で 始 ま り 、 オ ブ ジ ェ ク ト フ ァ イ ル の み を 作 成 す る よ う 、 −c コ ン パ イ ラ フ ラ グ を 含 ん で い な け れ ば な ら な い 。

libtool は 出 力 フ ァ イ ル の 名 前 を 決 定 す る と き 、 ソ ー ス フ ァ イ ル 名 か ら デ ィ レ ク ト リ 構 成 要 素 を 取 り 除 き 、 そ れ か ら C 言 語 の ソ ー ス コ ー ド の 拡 張 子 ’.c’ を ラ イ ブ ラ リ オ ブ ジ ェ ク ト の 拡 張 子 ’.lo’ に 置 き 換 え る と い う 方 法 を 用 い る 。 共 有 ラ イ ブ ラ リ が ビ ル ド さ れ る 場 合 、 必 要 な PIC 作 成 フ ラ グ す べ て が コ ン パ イ ル コ マ ン ド に 挿 入 さ れ る 。 −static オ プ シ ョ ン を 指 定 す る と 、 た と え −−disable−static が 設 定 さ れ て い た と し て も 、 libtool は ’.o’ フ ァ イ ル を 作 成 す る 。

−o オ プ シ ョ ン が 直 接 サ ポ ー ト さ れ て い な い プ ラ ッ ト フ ォ ー ム 上 で は (コ ン パ イ ラ に よ っ て 作 成 さ れ た オ ブ ジ ェ ク ト フ ァ イ ル の ロ ッ ク と 移 動 に よ り ) エ ミ ュ レ ー ト を 行 う 。 し た が っ て 、 以 下 の よ う な 通 常 の 構 文 を 使 う こ と が で き る 。

lightside:% libtool cc -c foo/x.c -o foo/x.lo プ ラ ッ ト フ ォ ー ム が −c−o オ プ シ ョ ン を サ ポ ー ト し て い な い 場 合 、 古 い ’foo/x.o’ を 上 書 き せ ず に ’foo/x.lo’ を ビ ル ド す る こ と は で き な い 。 こ の 場 合 、 ’foo/x.o’ が ’foo/x.lo’ の 後 に (再 ) ビ ル ド さ れ る こ と を 確 か め て お か な け れ ば な ら な い 。 リ ン ク モ ー ド リ ン ク モ ー ド は ラ イ ブ ラ リ や 実 行 可 能 プ ロ グ ラ ム を 作 成 す る た め に 、 オ ブ ジ ェ ク ト フ ァ イ ル (ラ イ ブ ラ リ オ ブ ジ ェ ク ト も 含 む ) を リ ン ク す る 。

MODE−ARGS は 、 C コ ン パ イ ラ が オ ブ ジ ェ ク ト フ ァ イ ル か ら (−o フ ラ グ に よ り ) 出 力 フ ァ イ ル OUTPUT−FILE を 作 成 す る と き に 使 用 す る コ マ ン ド で 構 成 さ れ る 。 以 下 の よ う に 、 フ ァ イ ル の 形 式 は OUTPUT−FILE の 拡 張 子 に 依 存 す る 。

.la

libtool ラ イ ブ ラ リ を 作 成 す る 。 こ の ラ イ ブ ラ リ は ラ イ ブ ラ リ オ ブ ジ ェ ク ト (’.lo’ フ ァ イ ル ) の み か ら ビ ル ド さ れ な け れ ば な ら な い 。 −rpath オ プ シ ョ ン が 必 要 で あ る 。 現 在 の 実 装 で は 、 libtool ラ イ ブ ラ リ は ア ン イ ン ス ト ー ル さ れ た 他 の libtool ラ イ ブ ラ リ に 依 存 で き な い 。

.a

ar(1) と (あ る い は ) ranlib(1) を 使 っ て 標 準 ラ イ ブ ラ リ が 作 成 さ れ る 。

.o .lo

(一 般 に は ’ld −r’ を 使 う こ と で ) 入 力 フ ァ イ ル か ら 再 ロ ー ド 可 能 な オ ブ ジ ェ ク ト フ ァ イ ル が 作 成 さ れ る 。 こ の 手 法 は ’’部 分 リ ン ク ’’ と 呼 ば れ る こ と が 多 い 。

other

実 行 可 能 な プ ロ グ ラ ム が 作 成 さ れ る 。 実 行 モ ー ド 実 行 モ ー ド で は 、 ラ イ ブ ラ リ パ ス の 環 境 変 数 が 自 動 的 に セ ッ ト さ れ (そ し て −dlopen に よ っ て 修 正 さ れ て )、 プ ロ グ ラ ム が 実 行 さ れ る 。 一 番 目 の MODE-ARGS は プ ロ グ ラ ム 名 と し て 扱 わ れ 、 残 り は プ ロ グ ラ ム の 引 数 と し て 扱 わ れ る 。 引 数 の 中 の ど れ か が libtool 実 行 フ ァ イ ル の ラ ッ パ ー で あ っ た 場 合 、 そ の 引 数 は そ れ ぞ れ 対 応 す る ア ン イ ン ス ト ー ル 済 み バ イ ナ リ の 名 前 に 変 換 さ れ る 。 こ の と き 、 必 要 と さ れ る ラ イ ブ ラ リ デ ィ レ ク ト リ が ラ イ ブ ラ リ パ ス に 加 え ら れ る 。 イ ン ス ト ー ル モ ー ド イ ン ス ト ー ル モ ー ド で は 、 MODE−ARGScp(1) も し く は BSD-互 換 の install(1) か ら 始 ま る イ ン ス ト ー ル コ マ ン ド と し て 解 釈 す る 。 残 り の MODE−ARGS は 、 イ ン ス ト ー ル コ マ ン ド の 引 数 と し て 解 釈 さ れ る 。 こ の コ マ ン ド は 実 行 さ れ 、 イ ン ス ト ー ル 後 の 処 理 に 必 要 な 非 特 権 コ マ ン ド も す べ て 完 了 す る 。 フ ィ ニ ッ シ ュ モ ー ド フ ィ ニ ッ シ ュ モ ー ド は 、 シ ス テ ム 管 理 者 の libtool ラ イ ブ ラ リ イ ン ス ト ー ル 作 業 を 補 助 し 、 libtool ラ イ ブ ラ リ の 探 索 お よ び ユ ー ザ ー プ ロ グ ラ ム へ の リ ン ク が で き る よ う に す る 。

MODE−ARG は ラ イ ブ ラ リ デ ィ レ ク ト リ 名 と し て 解 釈 さ れ る 。 こ の コ マ ン ド を 実 行 す る の に は ス ー パ ー ユ ー ザ ー 特 権 が 必 要 な た め 、 −−dry−run オ プ シ ョ ン を 使 う と 便 利 だ ろ う 。 ア ン イ ン ス ト ー ル モ ー ド こ の モ ー ド で は イ ン ス ト ー ル さ れ た ラ イ ブ ラ リ (も し く は フ ァ イ ル ) を 削 除 す る 。 一 番 目 の MODE−ARG は フ ァ イ ル を 削 除 す る た め の プ ロ グ ラ ム 名 (一 般 に は ’/bin/rm’) で あ る 。 残 り の MODE−ARGS は 削 除 プ ロ グ ラ ム の (’−’ で 始 ま る ) フ ラ グ も し く は 、 削 除 す る フ ァ イ ル の 名 前 で あ る 。

オ プ シ ョ ン

グ ロ ー バ ル オ プ シ ョ ン

−−config

libtool の 設 定 変 数 を 表 示 し て 終 了 す る 。

−−debug シ ェ ル ス ク リ プ ト の ト レ ー ス モ ー ド を 有 効 に し て 、 標 準 出 力 に 書 き 出 す 。
−n, −−dry−run
フ ァ イ ル の 作 成 ・ 修 正 ・ 削 除 を 行 わ ず 、 libtool に よ っ て ど の よ う な コ マ ン ド が 実 行 さ れ る か を 表 示 す る 。
−−features

libtool の 基 本 的 な 特 徴 を 表 示 す る 。 ま た 静 的 ラ イ ブ ラ リ と 共 有 ラ イ ブ ラ リ が 有 効 に な っ て い る か を 表 示 す る 。

−−finish

−−mode=finish と 同 じ 。

−−mode=MODE

MODE を オ ペ レ ー シ ョ ン モ ー ド と す る 。 デ フ ォ ル ト で は 、 オ ペ レ ー シ ョ ン モ ー ド は MODE−ARGS の 内 容 か ら 推 論 さ れ る 。 MODE を 指 定 す る 場 合 、 次 の う ち の 一 つ で な け れ ば な ら な い 。
compile
ソ ー ス フ ァ イ ル を libtool オ ブ ジ ェ ク ト に コ ン パ イ ル す る 。
execute
他 の プ ロ グ ラ ム が ア ン イ ン ス ト ー ル さ れ た プ ロ グ ラ ム や ラ イ ブ ラ リ (libtool に よ り 作 成 さ れ た も の ) を 使 う こ と が で き る よ う に 、 ラ イ ブ ラ リ パ ス を 自 動 的 に 設 定 す る 。

finish シ ス テ ム へ の

libtool ラ イ ブ ラ リ の イ ン ス ト ー ル を 完 了 す る 。

install ラ イ ブ ラ リ や 実 行 フ ァ イ ル を イ ン ス ト ー ル す る 。

link ラ イ ブ ラ リ や 実 行 フ ァ イ ル を 作 成 す る 。

uninstall ラ イ ブ ラ リ や 実 行 フ ァ イ ル を 削 除 す る 。

−−features

libtool の 設 定 情 報 を 表 示 し て 終 了 す る 。 こ の オ プ シ ョ ン を 使 う と 、 パ ッ ケ ー ジ は 共 有 ラ イ ブ ラ リ と 静 的 ラ イ ブ ラ リ の ど ち ら を 作 る か 決 定 で き る 。

−−help 使 用 法 の メ ッ セ ー ジ を 標 準 出 力 に 表 示 し て 、 正 常 終 了 す る 。

−−mode=MODE が 指 定 さ れ て い る 場 合 は 、 指 定 さ れ た モ ー ド に つ い て の ヘ ル プ が 表 示 さ れ る 。
−−version
バ ー ジ ョ ン 情 報 を 標 準 出 力 に 表 示 し て 、 正 常 終 了 す る 。 リ ン ク モ ー ド オ プ シ ョ ン

-lNAME

OUTPUT−FILE は イ ン ス ト ー ル 済 み の ラ イ ブ ラ リ libNAME を 必 要 と す る 。 こ の オ プ シ ョ ン は OUTPUT−FILE が 実 行 フ ァ イ ル で な く て も 必 要 と さ れ る 。

−o OUTPUT−FILE 指 定 し た オ ブ ジ ェ ク ト と ラ イ ブ ラ リ か ら OUTPUT−FILE を 作 成 す る 。
−L
LIBDIR 必 要 な イ ン ス ト ー ル 済 み ラ イ ブ ラ リ を LIBDIR か ら 検 索 す る 。
−R
LIBDIR

OUTPUT−FILE が 実 行 フ ァ イ ル の 場 合 は LIBDIR を 実 行 時 パ ス に 加 え る 。 OUTPUT−FILE が ラ イ ブ ラ リ の 場 合 は ’-RLIBDIR’ を DEPENDENCY_LIBS に 加 え る 。 こ れ は 、 そ の ラ イ ブ ラ リ が 実 行 フ ァ イ ル に リ ン ク さ れ る と き に 必 ず LIBDIR を 実 行 フ ァ イ ル の 実 行 時 パ ス に 加 え る た め で あ る 。

−all−static

OUTPUT−FILE が プ ロ グ ラ ム の 場 合 は 、 そ の プ ロ グ ラ ム を ど の 共 有 ラ イ ブ ラ リ と も リ ン ク さ せ な い 。 OUTPUT−FILE が ラ イ ブ ラ リ の 場 合 は 静 的 ラ イ ブ ラ リ を 作 成 す る の み で あ る 。

−avoid−version ど の よ う な 種 類 の バ ー ジ ョ ニ ン グ も 行 わ な い (バ ー ジ ョ ン 情 報 は 組 み 込 ま れ ず 、 シ ン ボ リ ッ ク リ ン ク も 作 ら れ な い )。 こ の オ プ シ ョ ン は バ ー ジ ョ ニ ン グ を 必 要 と す る プ ラ ッ ト ホ ー ム 上 で は 働 か な い 。
−dlopen
FILE ホ ス ト プ ラ ッ ト ホ ー ム 上 で ネ イ テ ィ ブ な ダ イ ナ ミ ッ ク ロ ー ド が サ ポ ー ト さ れ て い な い 場 合 や 、 実 行 フ ァ イ ル が −static−all−static を 使 っ て リ ン ク さ れ る 場 合 は 、 −dlpreopen FILE と 同 じ 。 そ れ 以 外 の 場 合 は 何 も 影 響 を 及 ぼ さ な い 。

FILE が ’実 行 フ ァ イ ル 自 身 ’ で あ っ た 場 合 、 libtool は 実 行 フ ァ イ ル が −export−dynamic−dlpreopen を 使 っ て 自 ら を dlopen(3) で き る か を 確 か め る 。

−dlpreopen FILE

FILE を 出 力 プ ロ グ ラ ム に リ ン ク し 、 そ の シ ン ボ ル を LT_PRELOADED_SYMBOLS に 加 え る 。

FILE が ’出 力 プ ロ グ ラ ム 自 身 ’ で あ っ た 場 合 、 出 力 プ ロ グ ラ ム 自 身 の シ ン ボ ル が LT_PRELOADED_SYMBOLS に 加 え ら れ る 。

−export−dynamic

OUTPUT−FILE の シ ン ボ ル を dlsym(3) を 使 っ て 解 決 で き る よ う に す る 。

−export−symbols FILE こ れ を サ ポ ー ト し て い る プ ラ ッ ト ホ ー ム 上 で は 、 リ ン カ は FILE に リ ス ト さ れ て い る シ ン ボ ル の み を エ ク ス ポ ー ト す る 。 FILE の 名 前 は ’.sym’ で 終 っ て い な け れ ば な ら ず 、 1 行 に 1 つ の シ ン ボ ル を 含 ん で い な け れ ば な ら な い 。 デ フ ォ ル ト で は す べ て の シ ン ボ ル が エ ク ス ポ ー ト さ れ る 。
−export−symbols−regex
REGEX

REGEX regex(7) に マ ッ チ す る シ ン ボ ル の み が エ ク ス ポ ー ト さ れ る 以 外 は −export−symbols と 同 じ 。

−module ダ イ ナ ミ ッ ク ロ ー ド で き る ラ イ ブ ラ リ を 作 成 す る 。 モ ジ ュ ー ル 名 は ’lib’ で 始 ま る 必 要 は な い が 、 名 前 の 衝 突 を 避 け る た め ’libname’ と ’name’ は パ ッ ケ ー ジ の 中 で 同 時 に 使 用 す べ き で は な い 。
−no−undefined

OUTPUT−FILE が 他 の ラ イ ブ ラ リ に 依 存 し て い な い こ と を 宣 言 す る 。 他 の ラ イ ブ ラ リ に 依 存 す る 共 有 ラ イ ブ ラ リ を 作 れ な い プ ラ ッ ト ホ ー ム も あ る 。

−release RELEASE ラ イ ブ ラ リ が パ ッ ケ ー ジ の リ リ ー ス RELEASE で 作 ら れ た こ と を 指 定 す る 。 こ れ に よ っ て 、 ユ ー ザ ー は ど の バ ー ジ ョ ン が 他 の も の よ り 新 し い か を 簡 単 に 判 断 で き る 。 こ の フ ラ グ を 使 う と 、 パ ッ ケ ー ジ の 各 リ リ ー ス の い か な る ペ ア の 間 に も バ イ ナ リ 互 換 は な く な る こ と に 注 意 せ よ 。 バ イ ナ リ 互 換 に し た い 場 合 は 、 −version−info フ ラ グ を 使 う こ と 。
−rpath
LIBDIR

OUTPUT−FILE が ラ イ ブ ラ リ の 場 合 、 最 終 的 に LIBDIR に イ ン ス ト ー ル さ れ る 。

−static

OUTPUT−FILE が プ ロ グ ラ ム の 場 合 、 ア ン イ ン ス ト ー ル さ れ た 共 有 libtool ラ イ ブ ラ リ は リ ン ク し な い 。 OUTPUT−FILE が ラ イ ブ ラ リ の 場 合 、 静 的 ラ イ ブ ラ リ を 作 成 す る の み で あ る 。

−version−info CURRENT[:REVISION[:AGE]]

OUTPUT−FILE が libtool ラ イ ブ ラ リ で あ る と き 、 ラ イ ブ ラ リ を ビ ル ド す る た め に イ ン タ ー フ ェ ー ス バ ー ジ ョ ン 情 報 CURRENT, REVISION, AGE を 使 う 。 パ ッ ケ ー ジ の リ リ ー ス 情 報 を 指 定 す る た め に 、 こ の オ プ シ ョ ン を 使 っ て は い け な い 。 む し ろ −release フ ラ グ を 参 照 す べ き で あ る 。 実 行 モ ー ド オ プ シ ョ ン

−dlopen FILE

FILE を 含 ん で い る デ ィ レ ク ト リ を ラ イ ブ ラ リ パ ス に 加 え る 。

バ ー ジ ョ ニ ン グ

libtool は 共 有 ラ イ ブ ラ リ 用 に 独 自 の バ ー ジ ョ ニ ン グ シ ス テ ム を 持 っ て い る 。 こ の シ ス テ ム を 使 い た い 場 合 は 、 −version−info オ プ シ ョ ン を 使 わ な け れ ば な ら な い 。 こ の オ プ シ ョ ン は CURRENT[:REVISION[:AGE]] と い う 形 式 の 引 数 を 受 け 付 け る 。
CURRENT
イ ン タ ー フ ェ ー ス の バ ー ジ ョ ン 。 イ ン タ ー フ ェ ー ス と は "外 側 " の 世 界 に 見 え る す べ て の も の で 、 変 数 ・ 関 数 プ ロ ト タ イ プ ・ 出 力 形 式 な ど で あ る 。
REVISION

CURRENT か ら の 相 対 値 で 与 え る 実 装 の バ ー ジ ョ ン 。

AGE こ の ラ イ ブ ラ リ が 実 装 し て い る 最 新 の イ ン タ ー フ ェ ー ス と 最 古 の イ ン タ ー フ ェ ー ス と の 違 い 。 言 い 替 え る と 、 こ の ラ イ ブ ラ リ は

CURRENT − AGE’ か ら CURRENT ま で の 範 囲 の す べ て の イ ン タ ー フ ェ ー ス 番 号 を 実 装 し て い て 、 こ の バ ー ジ ョ ン の 範 囲 に あ る ラ イ ブ ラ リ に 対 し て 過 去 に リ ン ク さ れ た す べ て の 実 行 フ ァ イ ル は 、 こ の ラ イ ブ ラ リ を 使 う こ と が で き る 、 と い う こ と で あ る 。

REVISIONAGE が 省 略 さ れ た 場 合 の デ フ ォ ル ト は 0 で あ る 。 AGECURRENT イ ン タ ー フ ェ ー ス 番 号 よ り 小 さ い か 等 し く な け れ ば な ら な い こ と に も 注 意 す る こ と 。 2 つ の ラ イ ブ ラ リ が 同 一 の CURRENT 番 号 と AGE 番 号 で あ る と き 、 ダ イ ナ ミ ッ ク リ ン カ は 大 き い REVISION 番 号 の ラ イ ブ ラ リ を 選 択 す る 。 バ ー ジ ョ ニ ン グ の ガ イ ド ラ イ ン :

• 1. そ れ ぞ れ の libtool ラ イ ブ ラ リ に つ い て ’0:0:0’ と い う バ ー ジ ョ ン 情 報 か ら 始 め な さ い 。

• 2. バ ー ジ ョ ン 情 報 を 更 新 す る の は ソ フ ト ウ ェ ア の 公 開 リ リ ー ス の 直 前 だ け に し な さ い 。 頻 繁 な 更 新 は 不 必 要 で あ り 、 現 在 の イ ン タ ー フ ェ ー ス 番 号 が 大 き く な る の を 早 く す る だ け で あ る 。

• 3. 前 回 の 更 新 か ら ラ イ ブ ラ リ の ソ ー ス コ ー ド が す っ か り 変 更 さ れ た な ら 、 REVISION を 増 加 さ せ な さ い (C:R:AC:R+1:A に な る )。

• 4. 前 回 の 更 新 か ら イ ン タ ー フ ェ ー ス が 追 加 ・ 削 除 ・ 変 更 さ れ た な ら 、 CURRENT を 増 加 さ せ 、 REVISION を 0 に し な さ い 。

• 5. 前 回 の 公 開 リ リ ー ス か ら イ ン タ ー フ ェ ー ス が 追 加 さ れ た な ら 、 AGE を 増 加 さ せ な さ い 。

• 6. 前 回 の 公 開 リ リ ー ス か ら イ ン タ ー フ ェ ー ス が 削 除 さ れ た な ら 、 AGE を 0 に し な さ い 。 パ ッ ケ ー ジ バ ー ジ ョ ン を ラ イ ブ ラ リ 名 に エ ン コ ー ド し た い 場 合 や 、 libtool の バ ー ジ ョ ニ ン グ と 衝 突 せ ず に 他 の バ ー ジ ョ ニ ン グ シ ス テ ム を 使 い た い 場 合 は 、 −release を 使 う こ と 。 た と え ば binutils−2.7.0.2 に 付 属 す る ’libbfd.so.2.7.0.2’ は libtool の バ ー ジ ョ ニ ン グ と 明 ら か に 衝 突 す る 。 ’−release 2.7.0’ を 使 え ば ’libbfd−2.7.0.so.0.0.0’ で 終 る こ と が で き る 。 異 な る CURRENT バ ー ジ ョ ン の ラ イ ブ ラ リ や 異 な る −release の ラ イ ブ ラ リ は バ イ ナ リ 非 互 換 で あ ろ う 。

イ ン タ ー フ ェ ー ス の 設 計

良 い ラ イ ブ ラ リ イ ン タ ー フ ェ ー ス を 書 く に は 、 練 習 と ラ イ ブ ラ リ が 解 決 し よ う と し て い る 問 題 に 対 す る 徹 底 的 な 理 解 が 必 要 で あ る 。 良 い イ ン タ ー フ ェ ー ス を 設 計 す れ ば 、 頻 繁 に 変 更 す る 必 要 は な く 、 ド キ ュ メ ン ト を 更 新 し 続 け る 必 要 も な く 、 ク ラ イ ア ン ト が ラ イ ブ ラ リ の 使 い 方 を 再 び 勉 強 し 続 け る 必 要 も な い だ ろ う 。 設 計 に 対 す る ガ イ ド ラ イ ン を い く つ か 示 す :

前 も っ て 計 画 を 立 て る エ ン ト リ ー ポ イ ン ト を 頻 繁 に 削 除 す る 必 要 が な い よ う に 、 そ れ ぞ れ の イ ン タ ー フ ェ ー ス を 最 小 に す る よ う に し な さ い 。

イ ン タ ー フ ェ ー ス の 変 更 を 避 け る も し イ ン タ ー フ ェ ー ス を 再 設 計 す る 必 要 が あ る な ら ば 、 ク ラ イ ア ン ト が 既 に 存 在 す る コ ー ド を 書 き 直 す 必 要 が な い よ う に 、 互 換 性 の あ る 関 数 も 残 し て お く よ う に し な さ い 。

見 え な い デ ー タ タ イ プ を 使 う ク ラ イ ア ン ト が ア ク セ ス す る 必 要 の あ る デ ー タ タ イ プ の 定 義 は 少 な い 程 良 い 。 可 能 な ら ば 、 関 数 が ジ ェ ネ リ ッ ク ポ イ ン タ (内 部 デ ー タ タ イ プ に キ ャ ス ト す る こ と が 可 能 ) を 受 け 付 け る よ う に 設 計 し な さ い 。 ク ラ イ ア ン ト に 直 接 デ ー タ を 操 作 さ せ る よ り は 、 ア ク セ ス 関 数 を 提 供 し な さ い 。 こ の よ う す る と イ ン タ ー フ ェ ー ス を 変 更 す る こ と な く デ ー タ 構 造 を 自 由 に 変 更 で き る 。

ヘ ッ ダ フ ァ イ ル を 使 う そ れ ぞ れ の ラ イ ブ ラ リ に つ い て 大 域 関 数 ・ 大 域 変 数 を ヘ ッ ダ フ ァ イ ル に 書 い て ラ イ ブ ラ リ の ソ ー ス フ ァ イ ル に イ ン ク ル ー ド し て お け ば 、 気 づ か ず に イ ン タ ー フ ェ ー ス の 変 更 を し て し ま っ て も コ ン パ イ ラ が 知 ら せ て く れ る だ ろ う 。

可 能 な と き は い つ で も 静 的 (も し く は 等 価 な も の ) を 使 う ラ イ ブ ラ リ に 大 域 関 数 が 少 な い ほ ど 、 ラ イ ブ ラ リ は 柔 軟 に 変 更 で き る 。 静 的 な 関 数 ・ 変 数 は 、 ク ラ イ ア ン ト が ア ク セ ス で き な い か ら イ ン タ ー フ ェ ー ス の 変 更 と は な ら な い の で 、 好 き な だ け 変 更 す る こ と が で き る 。

AUTOMAKE ル ー ル の 書 き 方

libtool ラ イ ブ ラ リ の サ ポ ー ト は 、 LTLIBRARIES プ ラ イ マ リ の も と に 実 装 さ れ て い る 。 プ ロ グ ラ ム を libtool ラ イ ブ ラ リ に リ ン ク す る た め に は 、 ラ イ ブ ラ リ 名 を 指 定 す る program_LDADD 変 数 を 使 う こ と 。 libtool に −static と い っ た オ プ シ ョ ン を 渡 す た め に は program_LDFLAGS を 使 う と 良 い 。

libtool ラ イ ブ ラ リ を ビ ル ド す る に は 、 ラ イ ブ ラ リ 名 を 指 定 す る lib_LTLIBRARIES を 使 う こ と 。 そ し て 、 た と え ば 、 libtool−version−info オ プ シ ョ ン を 渡 す に は lib_LDFLAGS を 使 う こ と 。 次 の セ ク シ ョ ン に 例 が あ る 。 作 業 を す る た め に は 、 パ ッ ケ ー ジ に い く つ か の 基 本 的 な フ ァ イ ル を 入 れ た り 、 libtoolize を 使 う 必 要 が あ る だ ろ う 。 libtool ス ク リ プ ト を 直 接 イ ン ク ル ー ド し て は な ら な い 。
config.guess
標 準 シ ス テ ム 名 を 推 測 し よ う と す る 。
config.sub
標 準 シ ス テ ム 名 を 確 認 す る サ ブ ル ー チ ン ス ク リ プ ト 。
ltconfig
指 示 さ れ た シ ス テ ム に つ い て libtool ス ク リ プ ト を 作 成 す る 。
ltmain.sh
基 本 的 な libtool の 機 能 を 実 装 し た 一 般 的 な ス ク リ プ ト 。

モ ジ ュ ー ル の ダ イ ナ ミ ッ ク ロ ー ド

libtool の ダ イ ナ ミ ッ ク ロ ー ド 機 能 を 使 う た め に は 、 configure.in の な か で AM_PROG_LIBTOOL よ り 前 に マ ク ロ AC_LIBTOOL_DLOPEN を 使 わ な け れ ば な ら な い 。 さ も な け れ ば 、 libtool は そ の プ ラ ッ ト ホ ー ム に は ダ イ ナ ミ ッ ク ロ ー ド の メ カ ニ ズ ム が な い と 仮 定 し て 、 こ れ を シ ミ ュ レ ー ト し よ う と す る 。 こ の シ ミ ュ レ ー シ ョ ン 機 能 を 使 う た め に は 、 実 行 フ ァ イ ル を リ ン ク す る と き に −dlopen−dlreopen フ ラ グ を 使 い 、 ダ イ ナ ミ ッ ク ロ ー ド す る オ ブ ジ ェ ク ト を 宣 言 し な け れ ば な ら な い 。 libtool は オ ブ ジ ェ ク ト フ ァ イ ル を リ ン ク し 、 以 下 の よ う な 実 行 フ ァ イ ル の シ ン ボ ル テ ー ブ ル を 保 持 し た デ ー タ 構 造 を 作 成 す る 。

struct lt_dlsymlist { const char *NAME; lt_ptr_t ADDRESS; }

NAME に は 、 "fprintf" の よ う な 、 シ ン ボ ル 名 の ア ス キ ー 文 字 列 が 保 持 さ れ る 。 ADDRESS は 、 &fprintf の よ う な 、 適 切 な オ ブ ジ ェ ク ト へ の ジ ェ ネ リ ッ ク ポ イ ン タ で あ る 。

const lt_dlsymlist * lt_preloaded_symbols; こ の 配 列 は 実 行 フ ァ イ ル に リ ン ク さ れ て い る プ リ ロ ー ド さ れ た シ ン ボ ル を 表 す 。−dlpreloaded さ れ た フ ァ イ ル の そ れ ぞ れ に つ い て 要 素 が 存 在 し 、 フ ァ イ ル 名 NAME と ’0’ と い う ア ド レ ス ADDRESS、 お よ び こ の フ ァ イ ル か ら エ ク ス ポ ー ト さ れ た す べ て の シ ン ボ ル を 保 持 す る 。 実 行 フ ァ イ ル 自 身 に つ い て は 、 特 別 な 名 前 @PROGRAM@ が 使 わ れ る 。 最 後 の エ レ メ ン ト は NAME と ’0’ と い う ADDRESS を 持 つ 。 ダ イ ナ ミ ッ ク ロ ー ド さ れ る ラ イ ブ ラ リ も し く は 、 モ ジ ュ ー ル を ダ イ ナ ミ ッ ク ロ ー ド し よ う と す る 実 行 フ ァ イ ル を リ ン ク す る と き は 、 −module フ ラ グ を 指 定 す る の を 忘 れ な い こ と 。 ダ イ ナ ミ ッ ク ロ ー ド し よ う と し て い る ラ イ ブ ラ リ の 外 部 シ ン ボ ル を 、 実 行 フ ァ イ ル が 参 照 す る 必 要 が あ る 場 合 は 、 実 行 フ ァ イ ル を リ ン ク す る と き に −export−dynamic を 使 用 す る こ と 。 ラ イ ブ ラ リ 名 に バ リ エ ー シ ョ ン が あ る の で 、 プ ロ グ ラ ム は ど れ が ダ イ ナ ミ ッ ク ロ ー ド す る た め の 正 し い フ ァ イ ル で あ る の か を 決 定 す る 必 要 が あ る 。 直 接 的 な 方 法 は ’.la’ フ ァ イ ル を 調 べ て 、

dlname=’DLNAME と い う 行 を 探 す こ と で あ る 。 こ の 行 は ラ イ ブ ラ リ を ダ イ ナ ミ ッ ク ロ ー ド で き な い 場 合 は 空 で 、 そ う で な い 場 合 は ラ イ ブ ラ リ の 名 前 が 入 っ て い る 。

ソ ー ス フ ァ イ ル ’foo.c’, ’bar.c’ か ら ’libbaz’ と よ ば れ る ラ イ ブ ラ リ を 作 成 し 、 次 に ’a’ と い う 名 前 の 実 行 フ ァ イ ル を 作 成 す る た め に ’a.c’ を ’libbaz’ と リ ン ク し よ う と い る 。 ラ イ ブ ラ リ の 作 成

コ ン パ イ ル モ ー ド : Linux は 共 有 ラ イ ブ ラ リ を サ ポ ー ト し て い る の で 、 libtool は 2 つ の オ ブ ジ ェ ク ト フ ァ イ ル 、 一 つ は 静 的 ラ イ ブ ラ リ (’foo.lo’)、 も う 一 つ は 共 有 ラ イ ブ ラ リ (’foo.o’) を 作 成 す る 。 ソ ー ス フ ァ イ ル 自 身 へ の リ ン ク を コ ン パ イ ラ に や ら せ た く な い の で 、 −c オ プ シ ョ ン は 必 須 で あ る 。

lightside:~% libtool cc −c foo.c
cc −c −fPIC −DPIC foo.c -o .libs/foo.lo
cc −c foo.c >/dev/null 2>&1
lightside:~% libtool cc -c bar.c
cc −c −fPIC −DPIC bar.c -o .libs/bar.lo
cc −c bar.c >/dev/null 2>&1

リ ン ク モ ー ド 、 静 的 ラ イ ブ ラ リ の み を ビ ル ド す る : 以 前 に 作 成 さ れ た ’.o’ と い う オ ブ ジ ェ ク ト フ ァ イ ル を 指 定 し て い る 。 −o オ プ シ ョ ン は 必 須 で あ る 。

lightside:~% libtool cc -o libbaz.a foo.o bar.o
ar cru libbaz.a foo.o bar.o
ranlib libbaz.a

リ ン ク モ ー ド 、 静 的 ラ イ ブ ラ リ と 共 有 ラ イ ブ ラ リ を ビ ル ド す る : ’.lo’ と い う オ ブ ジ ェ ク ト フ ァ イ ル を 指 定 す る 。 必 須 オ プ シ ョ ン は 、 前 と 同 じ −o と ラ イ ブ ラ リ の イ ン ス ト ー ル さ れ る デ ィ レ ク ト リ を 指 示 す る −rpath で あ る 。 ラ イ ブ ラ リ は ’.libs’ デ ィ レ ク ト リ に 作 成 さ れ る 。

lightside:~% libtool cc −o libbaz.la foo.lo bar.lo \
−rpath /usr/local/lib
cc −shared −Wl,−soname −Wl,libbaz.so.0 \
−o .libs/libbaz.so.0.0.0 foo.lo bar.lo
(cd .libs && ln −s libbaz.so.0.0.0 libbaz.so.0)
(cd .libs && ln −s libbaz.so.0.0.0 libbaz.so)
ar cru .libs/libbaz.a foo.o bar.o
ranlib .libs/libbaz.a
creating libbaz.la
(cd .libs && ln −s ../libbaz.la libbaz.la)

イ ン ス ト ー ル モ ー ド : ラ イ ブ ラ リ を 指 定 し た パ ス (こ の 場 合 は ’/usr/local/lib’) に イ ン ス ト ー ル す る た め に 必 要 な コ マ ン ド を 実 行 す る 。 こ の モ ー ド で は 共 有 ラ イ ブ ラ リ (’.so’) と 静 的 ラ イ ブ ラ リ (’.a’) を イ ン ス ト ー ル す る と と も に 、 ア ン イ ン ス ト ー ル と 情 報 提 供 の 目 的 で libtool フ ァ イ ル (’.la’) が イ ン ス ト ー ル さ れ る 。 こ の モ ー ド は ふ つ う 特 権 ユ ー ザ ー と し て 実 行 さ れ る の で 、 −n ま た は −−dry−run オ プ シ ョ ン を 指 定 し て 結 果 を チ ェ ッ ク し て お く と よ い 。

lightside:/tmp% libtool −n install libbaz.la /usr/local/lib
install .libs/libbaz.so.0.0.0 /usr/local/lib/libbaz.so.0.0.0
(cd /usr/local/lib && ln −s libbaz.so.0.0.0 libbaz.so.0)
(cd /usr/local/lib && ln −s libbaz.so.0.0.0 libbaz.so)
install libbaz.la /usr/local/lib/libbaz.la
install .libs/libbaz.a /usr/local/lib/libbaz.a
ranlib /usr/local/lib/libbaz.a
chmod 644 /usr/local/lib/libbaz.a 実 行 フ ァ イ ル の 作 成 最 初 に’a.c’ を コ ン パ イ ル す る

cc −c a.c ラ イ ブ ラ リ が 既 に イ ン ス ト ー ル さ れ て い る 場 合 に は 、 普 段 の よ う に 続 行 す る こ と が で き る

cc a.c −lbaz −L/usr/local/lib ラ イ ブ ラ リ が ま だ イ ン ス ト ー ル さ れ て い な い 場 合 は 、 実 行 フ ァ イ ル の リ ン ク ・ デ バ ッ グ ・ イ ン ス ト ー ル に libtool を 使 用 し な け れ ば な ら な い (一 度 ラ イ ブ ラ リ が イ ン ス ト ー ル さ れ る ま で 、 こ れ は つ づ く )。 実 際 の 実 行 フ ァ イ ル は イ ン ス ト ー ル さ れ る ま で ’.libs’ 内 に あ り 、 作 業 デ ィ レ ク ト リ に あ る 実 行 フ ァ イ ル は 単 な る ラ ッ パ ー で あ る こ と に 注 意 す る こ と 。 曖 昧 さ を 避 け る た め 、 絶 対 に −l−L を 使 っ て ア ン イ ン ス ト ー ル さ れ た 共 有 ラ イ ブ ラ リ に リ ン ク し て は な ら な い 。 ’.la’ フ ァ イ ル へ の パ ス だ け を 指 定 す る こ と 。 以 下 の (’−lm’) で わ か る よ う に 、 イ ン ス ト ー ル 済 み の ラ イ ブ ラ リ は 問 題 で は な い 。

lightside:~% libtool cc a.o libbaz.la −o a -lm
cc a.o −Wl,−−rpath −Wl,/usr/local/lib \
.libs/libbaz.so −o .libs/a -lm
lightside:~% libtool gdb a
[複 雑 な デ バ ッ グ の セ ッ シ ョ ン は 省 略 ]
lightside:~% libtool install −c a /usr/local/bin/a
install −c .libs/a /usr/local/bin/a

Makefile.am の 作 成
• 
最 初 に 簡 単 な configure.in を 作 成 し 、 automakelibtool の た め の マ ク ロ を 忘 れ ず に 追 加 す る 。

AC_DEFUN(AM_INIT_AUTOMAKE)
AC_INIT(a.c)
AM_INIT_AUTOMAKE(a, 1.0)
AC_PROG_CC
AM_PROG_LIBTOOL
AC_OUTPUT(Makefile)

• 対 応 す る Makefile.am

# ラ イ ブ ラ リ の ビ ル ド
lib_LTLIBRARIES=libbaz.la
libbaz_la_SOURCES = foo.c bar.c
libbaz_la_LDFLAGS = -version-info 0:0:0

bin_PROGRAMS = a a.debug

# a.c と libbaz.la か ら a を ビ ル ド
a_SOURCES = a.c
a_LDADD = libbaz.la

# 静 的 デ バ ッ グ バ ー ジ ョ ン を 作 成
a_debug_SOURCES = a.c
a_debug_LDADD = libbaz.la
a_debug_LDFLAGS = −static

• そ し て 最 後 に 実 行 す る

lightside:~% aclocal; libtoolize; automake −−add−missing; autoconf
lightside:~% ./configure; make

関 連 項 目

libtoolize(1), libltdl(3)

注 意

プ ロ グ ラ ム の バ グ に つ い て は <bug-libtool [AT] gnu.org> へ 報 告 し て く だ さ い 。 こ の man ペ ー ジ は Ragnar Hojland Espinosa <ragnar [AT] ragnar-hojland.com> が 作 成 し ま し た 。