基于unix的系统中的延迟负载等效

基于Unix系统的延迟负载相当于什么?

我有一个代码foo.cpp,与gcc编译时,我把它链接到共享对象(总共有三个.so文件在那里。)每个.so文件的不同选项。

./foo -v需要libversion.so ./foo -update需要libupdate.so

我需要这些库的符号应该只在运行时解决。

./foo -v不应该打破即使libupdate.so库不存在。

它正在使用延迟加载选项(在DLL的属性)的窗口中工作。 它在unix系统中的等效物是什么?

在UNIX中,“-lazy”选项是否也一样? 如果是这样,哪里包括这个选项? (在生成文件或链接器ld)。

我不擅长unix。 请帮助我..在此先感谢。

查看您的系统上的参考dlopen()。 您可以在运行时而不是在链接时手动打开库并解析外部符号。

挖出一个例子:

int main(int argc, char **argv) { void *handle=NULL; double (*myfunc)(double); char *err=NULL; handle = dlopen ("/lib/libm.so.1", RTLD_LAZY); if (!handle) { err=dlerror(); perror(err); exit(1); } myfunc = dlsym(handle, "sin"); if ((err = dlerror()) != NULL) { perror(err); exit(1); } printf("sin of 1 is:%f\n", (*myfunc)(1.)); dlclose(handle); return 0; }