[Gauche-devel-jp] Re: 動的リンカのシンボル解決

Zurück zum Archiv-Index

NISHIO Yasuhiro nishi****@hh*****
2004年 2月 16日 (月) 20:27:01 JST


こんにちは、西尾と申します。

以下の動作が正しいか否か理解していないのですが。

  -Bsymbolic

を利用してはどうでしょう。

先に投稿されていたスクリプトをちょっと変えた以下のやつで、
===ここから
cat <<'[EOF]' >fakem.c
double sin(double d) { return d + 0.5; }
double sin_wrapper(double d) {return sin(d);}
[EOF]
cat <<'[EOF]' >dltest.c
#include <stdio.h>
#include <dlfcn.h>
#include <math.h>
int main(void)
{
        void *h;
        double (*sin_wrapper)(double);

        h = dlopen("./fakem.so", RTLD_NOW);
        sin_wrapper = dlsym(h, "sin_wrapper");
        printf("sin(0.0) => %f\n", sin(0.0));
        printf("sin_wrapper(0.0) => %f\n", sin_wrapper(0.0));
}
[EOF]
cc -shared -o fakem.so fakem.c $1
cc -o dltest dltest.c -lm `[ -f /lib/libdl.so -o -f /usr/lib/libdl.so ] && printf "%s" -ldl`
./dltest
===ここまで

こんな感じになります。

% uname -rs
NetBSD 1.6ZK

% sh a.sh 
sin(0.0) => 0.000000
sin_wrapper(0.0) => 0.000000

% sh a.sh -Wl,-Bsymbolic
sin(0.0) => 0.000000
sin_wrapper(0.0) => 0.500000
%
-- 
西尾



Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index