[Gauche-devel-jp] Re: numeric compiler

Back to archive index

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










Gauche-devel-jp メーリングリストの案内
Back to archive index