<分区>
在我的目录中,我有两个文件。一个是foo.cpp
,另一个是bar.so
。在 foo.cpp
中,我尝试加载库 bar.so
:
#include <dlfcn.h>
#include <iostream>
int main()
{
void* handle = dlopen("bar.so", RTLD_NOW | RTLD_GLOBAL);
std::cout << handle << std::endl;
return 0;
}
在同一目录中,然后我从命令行编译代码:
g++ foo.cpp -ldl -o test
然而,当执行 test
时,这会打印出 0
,并且根据 dlopen
的文档:
If dlopen() fails for any reason, it returns NULL
那么当库文件与 CPP 文件位于同一目录时,为什么返回 NULL?
更新:
我现在已将 dlopen()
添加到我的 CPP 文件中,此输出:
bar.so: 无法打开共享对象文件:没有那个文件或目录
但是我不明白... bar.so
和 foo.cpp
在同一目录下,可执行文件是在同一目录下构建的,我当我运行可执行文件时,我在同一个目录中。
然后,我尝试为 bar.so
使用绝对路径,但随后收到一个新错误:
无效的 ELF header
快速谷歌后,我认为这可能是由于我安装了 Ubuntu。我实际上使用的是 MacBook,并安装了 Ubuntu 的 native 拷贝(不是虚拟机)。看来这是导致问题的原因,但我不知道如何解决。也许这个库文件将无法在 MacBook Ubuntu 上运行。