vine-users ML アーカイブ



[vine-users:071957] octave / kpathsea / Vine3.1

  • From: Toru Terao <terao@xxxxxxxxxxxxxxxx>
  • Subject: [vine-users:071957] octave / kpathsea / Vine3.1
  • Date: Tue, 24 May 2005 13:20:12 +0900
寺尾@大阪学院大学(初投稿) です

Vine3.1を使っております。

ほかのディストリビューション上で構築したoctaveを用いた科学技
術計算用のc++プログラムを、Vine3.1上で利用しようとして問題に
遭遇しました。

このプログラム hoge.cc(仮名) 自体は、octave の c++ クラスを
用いてそのメソッドを呼び出すものです。倍精度複素数配列クラス
である ComplexMatrix を利用しており、その連立一次方程式の求
解メソッド solve を利用しています。

どうも g++-3.3.2 では octave のヘッダファイル読み出し中に莫
大なエラーが出るので、g++-2.95.3 を用いて作業をしました。ま
た、readlineについてはどうも4.1でないといけないようなので、
readline41というパッケージををインストールして 
/usr/lib/libreadline.so.4.1 を用いるようにしています。

発生した問題は、kpse_clear_dir_cache というシンボルがないと
怒られてリンクに失敗する、というものです。kpse_... というシ
ンボルは libkpathsea にたくさんあるのですが、 
kpse_clear_dir_cache というものは見あたりません。ほかのどこ
かにあるかと探してみたのですが、見つかりませんでした。仕方が
ないので、同名の何もせずabortする関数を定義して乗り切りまし
たが、本当はどうするべきだったのでしょう?

octave のバージョンは 
	パッケージ:octave-2.0.17-0vl1
kpathsea は tetex 中に入っているもので
	パッケージ:tetex-2.0.2-0vl14
	ライブラリ:libkpathsea.so.3.4.5
g++ のバージョンは
	パッケージ:gcc295-c++-2.95.3-2vl24
	g++-2.95.3:gcc version 2.95.3 20010315 (release)
です。

具体的な結果は以下の通り。
---------
[terao@r3 Analysis]$ g++-2.95.3 hoge.cc -I/usr/include/octave-2.0.17 -L/usr/lib/octave-2.0.17 -loctave -lcruft /usr/lib/libreadline.so.4.1 -ldl -llapack -lblas -lkpathsea -lg2c -lcurses 
/usr/lib/octave-2.0.17/liboctave.so: undefined reference to `kpse_clear_dir_cache'
collect2: ld returned 1 exit status
---------

liboctave.so にある kpse_... 呼び出しは、 nm してみると
---------
         U kpse_all_path_search
         U kpse_clear_dir_cache
         U kpse_element_dirs
         U kpse_expand_default
         U kpse_path_element
         U kpse_path_expand
         U kpse_path_search
         U kpse_set_program_name
---------
の8つでした。libkpathsea.so.3.4.5 には、上記のうち 
kpse_clear_dir_cache をのぞく7つについてはシンボルが定義さ
れています。

この問題は既知の問題なのでしょうか? 正しい対処法をご存じの
方はご教示くださいますと助かります。

いろいろ検索したりしたので、FAQ ではないだろうとは思っている
のですが... もし FAQ でしたら申し訳ありません。

-- 
Toru Terao <terao@xxxxxxxxxxxxxxxx>