#include <stdio.h>
#include <dlfcn.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret = 0;
void *function;
char *pzerror;
char name[20] = {0};
char soname[20] = {0};
void (*test)(int, int);
while ((ret = getopt(argc, argv, "n:s:")) != -1) {
switch (ret) {
case 'n':
strcpy(name, optarg);
printf("name = %s\n", name);
break;
case 's':
strcpy(soname, optarg);
printf("soname = %s\n", soname);
break;
default:
printf("other option!");
}
printf("inx = %d, optopt = %c\n", optind, optopt);
}
function = dlopen(soname, RTLD_LAZY);
if (function == NULL) {
pzerror = dlerror();
printf("open active.so faild!\n%s\n", pzerror);
return -1;
}
test = dlsym(function, name);
if (test == NULL) {
pzerror = dlerror();
printf("find hellowolrd symbol faild!\n%s\n", pzerror);
return -1;
}
test(1, 2);
printf("\033[0;32;31m""%s: %d \n""\033[m", __func__, __LINE__);
dlclose(function);
return 0;
}