Shiro Kawai
shiro****@lava*****
2004年 6月 17日 (木) 18:47:50 JST
From: Shoji Kuzukami <kuzuk****@manba*****> Subject: [Gauche-devel-jp] Re: numeric compiler Date: Thu, 17 Jun 2004 16:56:54 +0900 > > それと、「.soファイルをインストールせずに」という話ですが、 > > dlopen()される方はadd-load-pathで制御できるので、 > > こちらのほうがやりたかった方です. > > (define-numeric (gauss-elimination matrix ...) > ...) > などと書いておけば, > > compileモードの時に, > コンパイルして,so-fileを作りインストールしないまま,適当なところに放置しておく. > > compileモード&通常モードの時に, > dynリンクして,計算する. > > という方式をとりたかっただけです. それなら、add-load-pathで、so-fileが置かれるディレクトリを ロードパスに加えておくだけで何とかなりませんか。 (dynamic-load "foo") が呼ばれると、Gaucheは概念的にはこういう動作をします。 (let loop ((paths *dynamic-load-path*)) (if (null? paths) (error "file not found") (let ((path (build-path (car paths) (string-append "foo" "." (gauche-dso-suffix))))) (if (file-exists? path) (begin (dlopen path) (call-init-function)) (loop (cdr paths)))))) つまりシステムのsoサーチメカニズムは使わず、自力でsoファイルを 探します。 *dynamic-load-path* はdsoファイルをサーチする場合に使われる *load-path*みたいなものです。add-load-pathを使えば*load-path*と *dynamic-load-path*の両方が更新されます。 あるいは、グローバルに*dynamic-load-path*を変えたくはないが、 soファイルの置場がはっきりしている場合は、dynamic-loadにフルパスを 与えてやることも出来ます。その場合は*dynamic-load-path*をサーチ せずに直接そのファイルをdlopenします。 --shiro