我在使用C ++ / Linux中的dlopen函数时遇到了问题。
void * hsiftgpu = dlopen("/full/path/libsiftgpu.so", RTLD_LAZY);
我认为dlerror()产生的任何错误都会告诉我无法找到/打开libsiftgpu.so。这是我检查错误的代码:
if(hsiftgpu == NULL){
std::cout << "Could not load libsiftgpu.so" << '\n';
fprintf(stderr, "dlopen failed: %s\n", dlerror());
return 0;
}
相反,它告诉我:
dlopen failed: libcudart.so.6.5: cannot open shared object file: No such file or directory
我对Linux中的文件处理不太熟悉,所以我可能会遗漏一些明显的东西。我想知道在调用dlopen之前是否需要重置一些东西,或者libsiftgpu.so是否正在调用libcudart.so.6.5?无论哪种方式,这个错误信息对我来说都没有多大意义。
我已经尝试添加LD_LIBRARY_PATH的路径(即使它不建议安全性,我只是想看看它是否可行)和/etc/lib.conf.so/我还检查了确保可执行文件和.so库都以相同的ELF-64格式编译。
我已经没有要检查的事情,我无法解释错误信息。任何指导或可能的解释都表示赞赏。
答案 0 :(得分:1)
这应该是指向32位库的可执行文件应该指向64位库的情况。我给评论的每个人都给了点数。