C++ Linux dlerror从dlopen返回错误消息,我可以';无法解释

C++ Linux dlerror从dlopen返回错误消息,我可以';无法解释,c++,linux,dlopen,C++,Linux,Dlopen,我在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'; f

我在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;
}
我不太熟悉Linux中的文件处理,所以我可能会遗漏一些明显的东西。我想知道在调用dlopen之前是否需要重置某些内容,或者调用libsiftgpu.so是否需要重置libcudart.so.6.5?不管怎样,这个错误消息对我来说没有多大意义

我已经尝试将该路径添加到LD_LIBRARY_path(尽管出于安全考虑不建议这样做,我只是想看看它是否可行)和/etc/lib.conf.so/I也进行了检查,以确保可执行文件和.so库都以相同的ELF-64格式编译


我已经没有要检查的内容了,我无法解释错误消息。欢迎提供任何指导或可能的解释。

事实证明,这是一种可执行文件指向32位库的情况,而它本应指向64位库。我给所有发表评论的人打分。

如果您键入
ldd/full/path/libsiftgpu.so
,您应该会找到由
libsiftgpu.so导入的所有库的列表。任何没有绝对路径的文件都必须定位并添加到您的
LD\u库路径中。可能还有更多,但遗憾的是,我没有在Linux上对库做太多工作。我运行了ldd和libcudart。因此.6.5显示了一个绝对路径。但是,该文件是指向libcudart.so.6.5.14(恰好位于同一目录中)的符号链接。如果我的可执行文件需要指向真实文件而不是链接,我不确定如何调整。在OS X上,请参阅
安装名称工具
。在Linux上,请参阅
dlopen failed: libcudart.so.6.5: cannot open shared object file: No such file or directory