Example: test.c
#include <stdio.h> #include <dlfcn.h> void func(void); int main(void) { void *lib; void (*func)(); printf("%s @ %s:%d\n", __FUNCTION__, __FILE__, __LINE__); lib = dlopen("./sharedlib.so", RTLD_LAZY); func = dlsym(lib, "func"); func(); return 0; } void func(void) { printf("%s @ %s:%d\n", __FUNCTION__, __FILE__, __LINE__); } void func2(void) { printf("%s @ %s:%d\n", __FUNCTION__, __FILE__, __LINE__); }Shared library ソース
Example: sharedlib.c
#include <stdio.h> void func2(void); void func(void) { printf("%s @ %s:%d\n", __FUNCTION__, __FILE__, __LINE__); func2(); } void func2(void) { printf("%s @ %s:%d\n", __FUNCTION__, __FILE__, __LINE__); }Example: Makefile
CC = gcc default: test sharedlib.so test: test.o $(CC) -o test test.o -ldl test.o: test.c $(CC) -c test.c sharedlib.o: sharedlib.c $(CC) -fPIC -c sharedlib.c sharedlib.so: sharedlib.o $(CC) -shared sharedlib.o -o sharedlib.so clean: rm -rf *.o rm -rf *.so rm -rf testこのプログラムをコンパイルして実行すると以下のように test にある func, func2 は実行されず、sharedlib.c にある func, func2 が上書きされて実行される
$ ./test main @ test.c:10 func @ sharedlib.c:7 func2 @ sharedlib.c:14
0 件のコメント:
コメントを投稿