【发布时间】:2014-08-08 10:53:14
【问题描述】:
我在使用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() 的情况下的逻辑是什么
【问题讨论】:
-
只需使用 RTLD_GLOBAL 预先打开其他库。