我读到你可以使用dlfcn.h来使用动态链接器API这里是使用API的代码示例
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int x[2]={1,2};
int y[2]={3,4};
int z[2];
int main(){
void *handle;
void(*addvec)(int *,int *,int *,int);
char *error;
// Dynamically load shared library that contains addvec()
handle=dlopen("./libvec.so",RTLD_LAZY);
if(!handle){
fprintf(stderr,"%s\n",dlerror());
exit(1);
}
// Get a pointer to the addvec() function we just loaded
addvec=dlsym(handle,"addvec");
if((error=dlerror())!=NULL){
fprintf(stderr,"%s\n",dlerror());
exit(1);
}
// now we can call addvec() just like any other function
addvec(x,y,z,2);
printf("z=[%d %d]\n",z[0],z[1]);
// unload the shared library
if(dlclose(handle)<0){
fprintf(stderr,"%s\n",dlerror());
exit(1);
}
return 0;
}
它在运行时加载并链接libvec.so共享库。 但有人可以解释何时以及如何在运行时链接和加载.so(在Windows上的DLL)在加载时更好,更有用?因为从示例中看它似乎没有用。感谢。
答案 0 :(得分:1)
但有人可以解释何时以及如何在运行时链接和加载.so在加载时更好,更有用?
至少有三个相对常见的用例:
libmp3lame.so
可用,用它来播放MP3。否则,功能不可用。)dlopen
/ dlclose
调用来实现这一目标(如果您的代码不修改全局状态,但例如计算一些统计信息)。