如果要动态链接,请使用 dlopen/dlsym 来解析 UNIX .so 共享库入口点。
http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html
假设您知道要调用的函数的名称,以及它们在哪个 .so 中。这相当简单。
void *handle;
int *iptr, (*fptr)(int);
/* open the needed object */
handle = dlopen("/usr/home/me/libfoo.so", RTLD_LOCAL | RTLD_LAZY);
/* find the address of function and data objects */
*(void **)(&fptr) = dlsym(handle, "my_function");
iptr = (int *)dlsym(handle, "my_object");
/* invoke function, passing value of integer as a parameter */
(*fptr)(*iptr);
如果您想获取所有动态符号的列表,objdump -T file.so 是您的最佳选择。(objdump -t file.a 如果您正在寻找静态绑定函数)。objdump 是跨平台的,是 binutils 的一部分,所以在紧要关头,您可以将二进制文件复制到另一个系统,并在不同平台上使用 objdump 对它们进行错误处理。
如果您希望动态链接是最佳的,您应该查看您的 ld.so.conf,它指定了 ld.so.cache 的搜索顺序(so.cache right ;)。