so模版:
头文件showmessage.h
#include
void say(char *str);
cpp文件showmessage.c
#include "showmessage.h"
void say(char *str)
{
printf("this is in so-file, but is from test_so app\n", str);
}
测试文件:
#include
#include
#include
void main(void)
{
void *dp;
char *error;
void (*say)(char *);
puts("so文件应用示范");
dp = dlopen("./libmy.so", RTLD_LAZY); /*打开动态链接库*/
if(dp == NULL)
{
fputs(dlerror(), stderr);
exit(1);
}
say = dlsym(dp, "say");
error = dlerror();
if(dp == NULL)
{
fputs(dlerror(), stderr);
exit(1);
}
say("hello world");
dlclose(dp);
}
so和测试so的Makefile文件:
all:test_so libmy.so
libmy.so:
gcc -s -shared -o libmy.so showmessage.c编译成为so文件的关键
test_so:
gcc testso.c -o test_so -L ./ -ldl可以找到相应的so文件的关键clean: rm libmy.so test_so