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 件のコメント:
コメントを投稿