名 前
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 ラ イ ブ ラ リ に 依 存 で き な い 。
.o .lo
(一 般 に は ’ld −r’ を 使 う こ と で ) 入 力 フ ァ イ ル か ら 再 ロ ー ド 可 能 な オ ブ ジ ェ ク ト フ ァ イ ル が 作 成 さ れ る 。 こ の 手 法 は ’’部 分 リ ン ク ’’ と 呼 ば れ る こ と が 多 い 。
other
実 行 可 能 な プ ロ グ ラ ム が 作 成 さ れ る 。 実 行 モ ー ド 実 行 モ ー ド で は 、 ラ イ ブ ラ リ パ ス の 環 境 変 数 が 自 動 的 に セ ッ ト さ れ (そ し て −dlopen に よ っ て 修 正 さ れ て )、 プ ロ グ ラ ム が 実 行 さ れ る 。 一 番 目 の MODE-ARGS は プ ロ グ ラ ム 名 と し て 扱 わ れ 、 残 り は プ ロ グ ラ ム の 引 数 と し て 扱 わ れ る 。 引 数 の 中 の ど れ か が libtool 実 行 フ ァ イ ル の ラ ッ パ ー で あ っ た 場 合 、 そ の 引 数 は そ れ ぞ れ 対 応 す る ア ン イ ン ス ト ー ル 済 み バ イ ナ リ の 名 前 に 変 換 さ れ る 。 こ の と き 、 必 要 と さ れ る ラ イ ブ ラ リ デ ィ レ ク ト リ が ラ イ ブ ラ リ パ ス に 加 え ら れ る 。 イ ン ス ト ー ル モ ー ド イ ン ス ト ー ル モ ー ド で は 、 MODE−ARGS を cp(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 を 作
成 す る 。
−LLIBDIR 必 要 な
イ ン ス ト ー ル
済 み ラ イ ブ ラ
リ を 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 ま で の 範 囲 の す べ て の イ ン タ ー フ ェ ー ス 番 号 を 実 装 し て い て 、 こ の バ ー ジ ョ ン の 範 囲 に あ る ラ イ ブ ラ リ に 対 し て 過 去 に リ ン ク さ れ た す べ て の 実 行 フ ァ イ ル は 、 こ の ラ イ ブ ラ リ を 使 う こ と が で き る 、 と い う こ と で あ る 。
REVISION と AGE が 省 略 さ れ た 場 合 の デ フ ォ ル ト は 0 で あ る 。 AGE は CURRENT イ ン タ ー フ ェ ー ス 番 号 よ り 小 さ い か 等 し く な け れ ば な ら な い こ と に も 注 意 す る こ と 。 2 つ の ラ イ ブ ラ リ が 同 一 の CURRENT 番 号 と AGE 番 号 で あ る と き 、 ダ イ ナ ミ ッ ク リ ン カ は 大 き い REVISION 番 号 の ラ イ ブ ラ リ を 選 択 す る 。 バ ー ジ ョ ニ ン グ の ガ イ ド ラ イ ン :
• 1. そ れ ぞ れ の libtool ラ イ ブ ラ リ に つ い て ’0:0:0’ と い う バ ー ジ ョ ン 情 報 か ら 始 め な さ い 。
• 2. バ ー ジ ョ ン 情 報 を 更 新 す る の は ソ フ ト ウ ェ ア の 公 開 リ リ ー ス の 直 前 だ け に し な さ い 。 頻 繁 な 更 新 は 不 必 要 で あ り 、 現 在 の イ ン タ ー フ ェ ー ス 番 号 が 大 き く な る の を 早 く す る だ け で あ る 。
• 3. 前 回 の 更 新 か ら ラ イ ブ ラ リ の ソ ー ス コ ー ド が す っ か り 変 更 さ れ た な ら 、 REVISION を 増 加 さ せ な さ い (C:R:A が C: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 を 作 成
し 、 automake と libtool
の た め の マ ク
ロ を 忘 れ ず に
追 加 す る 。
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
関 連 項 目
注 意
プ ロ グ ラ ム の バ グ に つ い て は <bug-libtool [AT] gnu.org> へ 報 告 し て く だ さ い 。 こ の man ペ ー ジ は Ragnar Hojland Espinosa <ragnar [AT] ragnar-hojland.com> が 作 成 し ま し た 。