// string.c
#define ENDSTRING '\0'
int StrLen(char *string)
{
int len = 0;
while (*string++ != ENDSTRING)
{
len++;
}
return len;
}
// main.c
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char *argv[])
{
char src[] = "Hello Dymatic";
int (*pStrLenFun)(char *str);
void *phandle = NULL;
char *perr = NULL;
phandle = dlopen("./libstr.so", RTLD_LAZY);
if (!phandle)
{
printf("Failed Load library!\n");
}
perr = dlerror();
if (perr != NULL)
{
printf("%s\n", perr);
return 0;
}
pStrLenFun = dlsym(phandle, "StrLen");
perr = dlerror();
if (perr != NULL)
{
printf("%s\n", perr);
return 0;
}
printf("the string length is: %d\n", pStrLenFun(src));
dlclose(phandle);
return 0;
}
编译生成 libstr.so:gcc -shared string.c -o libstr.so
编译 main.c 生成 test:gcc -o test main.c -ldl // 需要动态链接库 libdl.so