[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

11. 他の言語でlibtoolを使用する

libtoolは最初に,C言語での共有ライブラリを書くことに対するサポートを加え るために実装されました.しかし,時間が経ち,プログラマが好みのプログラム 言語での共有ライブラリの便利さを自由に得られるように,libtoolは他の言語 と統合されています.

この章は,libtoolが他の言語と相互作用する方法と,Cを用いない場合に必要と される特記事項を記述します.


11.1 C++に対するライブラリを書く

C++コードのライブラリを作成することは,そのオブジェクトファイルがCのもの と3つの点で異なっているだけので,かなり簡単な処理になります.

  1. 名前をmangleするため,C++ライブラリはC++コンパイラで作成されたものだけ利 用可能です.この決定は,コンストラクタ,例外処理,そしてRTTIのような機能 の実装との衝突からユーザを守るため,C++の設計者によってなされました.

  2. システムによっては,ダイナミックリンカが動的(すなわち実行時)に初期化の実 行するため,C++コンパイラは特別な動作を行なう必要があります.これは,そ のようなライブラリとリンクするため,`ld'を直接呼び出すべきではなく, その代わりにC++コンパイラを使用するべきだということを意味します.

  3. C++コンパイラは,いくつかの標準C++ライブラリとデフォルトでリンクしますが, libtoolは,これらのライブラリがどれかを知らないため,それに対してリンク する方法を調査するため,ライブラリ内部の依存の解析さえ実行できません.そ れゆえ,C++プログラムやライブラリとリンクするため`ld'を実行すると失 敗すると思われます.しかし,C++コンパイラを直接実行することは,ライブラ リ内部の依存に関係する問題を生じる可能性があります.

結論として,libtoolはC++ライブラリに対する一般的な使用のための準備ができ ていません.標準Cコンパイラでコンパイルする場合は,"初期化要素は一定で はない"というエラーの原因となる,あらゆるグローバルまたはスタティック変 数の初期化を避けるべきです.

この問題に関して動作する他の方法もありますが,それらはこのマニュアルの範 囲を越えています.

さらに,C++コンパイラがデフォルトでリンクするC++標準ライブラリと,リンク コマンドラインの明示的なリストは,コンフィグレーション時に分かった方が良 いでしょう.たぶん将来,libtoolはこの仕事を単独で可能となるでしょう.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.