寺尾@大阪学院大学(初投稿) です
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>