gpt4 book ai didi

c++ - dlopen() 返回 0

转载 作者:太空狗 更新时间:2023-10-29 11:40:28 26 4
gpt4 key购买 nike

<分区>

在我的目录中,我有两个文件。一个是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.sofoo.cpp 在同一目录下,可执行文件是在同一目录下构建的,我当我运行可执行文件时,我在同一个目录中。

然后,我尝试为 bar.so 使用绝对路径,但随后收到一个新错误:

无效的 ELF header

快速谷歌后,我认为这可能是由于我安装了 Ubuntu。我实际上使用的是 MacBook,并安装了 Ubuntu 的 native 拷贝(不是虚拟机)。看来这是导致问题的原因,但我不知道如何解决。也许这个库文件将无法在 MacBook Ubuntu 上运行。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com