使用dlopen()加载时解决动态库依赖项

时间:2014-08-08 10:53:15

标签: c linux dlopen

我在使用dlopen()加载动态库时遇到问题: 我尝试加载库:

handle = dlopen("libmkl_intel_lp64.so", RTLD_LAZY);

此代码失败,并显示dlerror()的以下消息:

/opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_intel_lp64.so: undefined symbol: mkl_vsl_serv_threader_for

我知道这个符号可以在另一个库libmkl_gnu_thread.so中找到。如果使用LD_PRELOAD加载该库,则上面提到的未定义符号错误就会消失。但是,如何在不使用LD_PRELOAD的情况下使此符号可用?

如果是显式链接,我会列出所有库,但我不确定在使用dlopen()

的情况下逻辑是什么

1 个答案:

答案 0 :(得分:0)

您需要为.so文件添加依赖项。使用ldd命令显示这些依赖项。它们以多种方式添加 - 最常见的是在编译.so时,添加-l<dep>以向<dep>.so添加依赖项。