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 % -- 西尾