#####
A.C
[
#include <stdio.h>
int a(char *s)
{
fprint(stdout,"a called : %s/n",s);
retuin 0;
}
]
#####
B.C
[
#include <stdio.h>
int b(char *s)
{
fprint(stdout,"b called : %s/n",s);
retuin 0;
}
]
#####
dll.c
[[[
include <stdio.h>
include <string.h>
include <stdlib.h>
include <unistd.h>
include <dlfcn.h>
int main(int argc, char **argv)
{
char fun_name[32];
char so_name[]= "./tmp/libz.so";
void *hd;
int (*app)(char *);
int rc = 0;
hd = dlopen(so_name, RTLD_LAZY);
if (dlerror() != null) {
fprintf(stderr, "dlopen error/n");
return -1;
}
strcpy(fun_name,"a");
app = dlsym(hd, fun_name);
if (dlerror() != null) {
fprintf(stderr, "dlsym error/n");
dlclose(hd);
return -2;
}
rc = app("aaa");
if (rc < 0) {
fprintf(stderr, "Call error [%d]/n", rc);
}
else {
fprintf(stderr, "Call OK [%d]/n", rc);
}
strcpy(fun_name,"b");
app = dlsym(hd, fun_name);
if (dlerror() != null) {
fprintf(stderr, "dlsym error/n");
dlclose(hd);
return -3;
}
rc = app("bbb");
if (rc < 0) {
fprintf(stderr, "Call error [%d]/n", rc);
}
else {
fprintf(stderr, "Call OK [%d]/n", rc);
}
dlclose(hd);
return 0;
}
]]]]
#####