2012年8月7日火曜日

Matlab がいつの間にか仕様変更になっている

SDPA-C の mex を準備していて気がついたが、Matlab がいつの間にか仕様変更になっている。
あるいはバグなのかもしれない。

Linux の共有ライブラリでは、複数の共有ライブラリで同じ関数名があるときにはコンパイルのときに指定されたもので優先順位が固定され、これは ldd でも確認できるが、Matlab の場合はこれが適用されない。

たとえば、MUMPS の libdmumps_seq.so からは内部的に ATLAS 由来の関数を呼び出すようにすると -latlas などとなって ldd で mex 関数をチェックすると、この共有ライブラリの関数が呼び出されることになっているのだが、Matlab で実行すると Matlab が持っている MKL のほうが呼び出されてしまう。

MUMPS の場合には、/usr/lib/libdmumps_seq.a などすべてのライブラリを直接リンクすることで回避できるが(共有ライブラリのMatlab側の強制上書きをはじくことができる)、Debian のCHOLMOD関係の lib???.a は -fPIC がついた状態でコンパイルされていないため、これを回避できない。

現状では、Debian のほうに -fPIC をつけてコンパイルしてもらうようにバグレポートを登録しておいた。
本来ならば Matlab が修正するべき問題であるが、以前 Matlab のサポートに連絡したときに Linux についてのサポートはあまり行きとどいていなかったので、たぶん Debian のほうで修正される方が早いと考えられる。

ただ、Redhat などで自分でソースから CHOLMOD をコンパイルするときには、-fPIC をつけ直さないといけないかもしれない。

今日の作業内容:SDPA-C 4h
今日のランチ:味庵 白身魚のチリソース
明日の予測作業時間:4h



0 件のコメント:

コメントを投稿