名 前
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’ を 使 う こ と で ) 入 力 フ ァ イ ル か ら 再 ロ ー ド 可 能 な オ ブ ジ ェ ク ト フ ァ イ ル が 作 成 さ れ る 。 こ の 手 法 は ’’部 分 リ ン ク ’’ と 呼 ば れ る こ と が 多 い 。 実 行 可 能 な プ ロ グ ラ ム が 作 成 さ れ る 。 実 行 モ ー ド 実 行 モ ー ド で は 、 ラ イ ブ ラ リ パ ス の 環 境 変 数 が 自 動 的 に セ ッ ト さ れ (そ し て −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
シ ェ ル ス ク リ
プ ト の ト レ ー
ス モ ー ド を 有
効 に し て 、 標
準 出 力 に 書 き
出 す 。 libtool の 基 本 的 な 特 徴 を 表 示 す る 。 ま た 静 的 ラ イ ブ ラ リ と 共 有 ラ イ ブ ラ リ が 有 効 に な っ て い る か を 表 示 す る 。 −−finish −−mode=finish と 同 じ 。 −−mode=MODE MODE を オ
ペ レ ー シ ョ ン
モ ー ド と す る
。 デ フ ォ ル ト
で は 、 オ ペ レ
ー シ ョ ン モ ー
ド は MODE−ARGS の 内
容 か ら 推 論 さ
れ る 。 MODE を 指
定 す る 場 合 、
次 の う ち の 一
つ で な け れ ば
な ら な い 。
install ラ イ ブ ラ リ や 実 行 フ ァ イ ル を イ ン ス ト ー ル す る 。
uninstall ラ イ ブ ラ リ や 実 行 フ ァ イ ル を 削 除 す る 。 −−features libtool の 設 定 情 報 を 表 示 し て 終 了 す る 。 こ の オ プ シ ョ ン を 使 う と 、 パ ッ ケ ー ジ は 共 有 ラ イ ブ ラ リ と 静 的 ラ イ ブ ラ リ の ど ち ら を 作 る か 決 定 で き る 。
−−mode=MODE
が 指 定 さ れ て
い る 場 合 は 、
指 定 さ れ た モ
ー ド に つ い て
の ヘ ル プ が 表
示 さ れ る 。
−o
OUTPUT−FILE 指 定 し た
オ ブ ジ ェ ク ト
と ラ イ ブ ラ リ
か ら OUTPUT−FILE を 作
成 す る 。 OUTPUT−FILE が 実 行 フ ァ イ ル の 場 合 は LIBDIR を 実 行 時 パ ス に 加 え る 。 OUTPUT−FILE が ラ イ ブ ラ リ の 場 合 は ’-RLIBDIR’ を DEPENDENCY_LIBS に 加 え る 。 こ れ は 、 そ の ラ イ ブ ラ リ が 実 行 フ ァ イ ル に リ ン ク さ れ る と き に 必 ず LIBDIR を 実 行 フ ァ イ ル の 実 行 時 パ ス に 加 え る た め で あ る 。 −all−static OUTPUT−FILE が プ ロ グ ラ ム の 場 合 は 、 そ の プ ロ グ ラ ム を ど の 共 有 ラ イ ブ ラ リ と も リ ン ク さ せ な い 。 OUTPUT−FILE が ラ イ ブ ラ リ の 場 合 は 静 的 ラ イ ブ ラ リ を 作 成 す る の み で あ る 。 −avoid−version
ど の よ う な 種
類 の バ ー ジ ョ
ニ ン グ も 行 わ
な い (バ ー ジ ョ
ン 情 報 は 組 み
込 ま れ ず 、 シ
ン ボ リ ッ ク リ
ン ク も 作 ら れ
な い )。 こ の オ
プ シ ョ ン は バ
ー ジ ョ ニ ン グ
を 必 要 と す る
プ ラ ッ ト ホ ー
ム 上 で は 働 か
な い 。 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 つ の シ
ン ボ ル を 含 ん
で い な け れ ば
な ら な い 。 デ
フ ォ ル ト で は
す べ て の シ ン
ボ ル が エ ク ス
ポ ー ト さ れ る
。 REGEX regex(7) に マ ッ チ す る シ ン ボ ル の み が エ ク ス ポ ー ト さ れ る 以 外 は −export−symbols と 同 じ 。 −module ダ
イ ナ ミ ッ ク ロ
ー ド で き る ラ
イ ブ ラ リ を 作
成 す る 。 モ ジ
ュ ー ル 名 は
’lib’ で 始 ま る
必 要 は な い が
、 名 前 の 衝 突
を 避 け る た め
’libname’ と ’name’ は
パ ッ ケ ー ジ の
中 で 同 時 に 使
用 す べ き で は
な い 。 OUTPUT−FILE が 他 の ラ イ ブ ラ リ に 依 存 し て い な い こ と を 宣 言 す る 。 他 の ラ イ ブ ラ リ に 依 存 す る 共 有 ラ イ ブ ラ リ を 作 れ な い プ ラ ッ ト ホ ー ム も あ る 。 −release
RELEASE ラ イ ブ ラ リ
が パ ッ ケ ー ジ
の リ リ ー ス RELEASE
で 作 ら れ た こ
と を 指 定 す る
。 こ れ に よ っ
て 、 ユ ー ザ ー
は ど の バ ー ジ
ョ ン が 他 の も
の よ り 新 し い
か を 簡 単 に 判
断 で き る 。 こ
の フ ラ グ を 使
う と 、 パ ッ ケ
ー ジ の 各 リ リ
ー ス の い か な
る ペ ア の 間 に
も バ イ ナ リ 互
換 は な く な る
こ と に 注 意 せ
よ 。 バ イ ナ リ
互 換 に し た い
場 合 は 、
−version−info フ ラ グ
を 使 う こ と 。
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 か ら の 相 対 値 で 与 え る 実 装 の バ ー ジ ョ ン 。
’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 ス ク リ プ ト
を 直 接 イ ン ク
ル ー ド し て は
な ら な い 。 モ ジ ュ ー ル の ダ イ ナ ミ ッ ク ロ ー ド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 • リ ン ク モ ー ド 、 静 的 ラ イ ブ ラ リ の み を ビ ル ド す る : 以 前 に 作 成 さ れ た ’.o’ と い う オ ブ ジ ェ ク ト フ ァ イ ル を 指 定 し て い る 。 −o オ プ シ ョ ン は 必 須 で あ る 。 lightside:~%
libtool cc -o libbaz.a foo.o bar.o • リ ン ク モ ー ド 、 静 的 ラ イ ブ ラ リ と 共 有 ラ イ ブ ラ リ を ビ ル ド す る : ’.lo’ と い う オ ブ ジ ェ ク ト フ ァ イ ル を 指 定 す る 。 必 須 オ プ シ ョ ン は 、 前 と 同 じ −o と ラ イ ブ ラ リ の イ ン ス ト ー ル さ れ る デ ィ レ ク ト リ を 指 示 す る −rpath で あ る 。 ラ イ ブ ラ リ は ’.libs’ デ ィ レ ク ト リ に 作 成 さ れ る 。 lightside:~%
libtool cc −o libbaz.la foo.lo bar.lo \ • イ ン ス ト ー ル モ ー ド : ラ イ ブ ラ リ を 指 定 し た パ ス (こ の 場 合 は ’/usr/local/lib’) に イ ン ス ト ー ル す る た め に 必 要 な コ マ ン ド を 実 行 す る 。 こ の モ ー ド で は 共 有 ラ イ ブ ラ リ (’.so’) と 静 的 ラ イ ブ ラ リ (’.a’) を イ ン ス ト ー ル す る と と も に 、 ア ン イ ン ス ト ー ル と 情 報 提 供 の 目 的 で libtool フ ァ イ ル (’.la’) が イ ン ス ト ー ル さ れ る 。 こ の モ ー ド は ふ つ う 特 権 ユ ー ザ ー と し て 実 行 さ れ る の で 、 −n ま た は −−dry−run オ プ シ ョ ン を 指 定 し て 結 果 を チ ェ ッ ク し て お く と よ い 。 lightside:/tmp%
libtool −n install libbaz.la /usr/local/lib 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 Makefile.am
の 作 成 AC_DEFUN(AM_INIT_AUTOMAKE)
• 対 応 す る Makefile.am # ラ
イ ブ ラ リ の ビ
ル ド bin_PROGRAMS = a a.debug # a.c と
libbaz.la か ら a を ビ ル
ド # 静
的 デ バ ッ グ バ
ー ジ ョ ン を 作
成 • そ し て 最 後 に 実 行 す る lightside:~%
aclocal; libtoolize; automake
−−add−missing; autoconf 関 連 項 目注 意プ ロ グ ラ ム の バ グ に つ い て は <bug-libtool [AT] gnu.org> へ 報 告 し て く だ さ い 。 こ の man ペ ー ジ は Ragnar Hojland Espinosa <ragnar [AT] ragnar-hojland.com> が 作 成 し ま し た 。 |