孟智将 2013-12-24 08:40 采纳率: 0%
浏览 1023

undefined referese to dlopen eclipse c++开发编译的时候遇到的

#include
#include
int main(void)
{
void handle=NULL;
handle = dlopen("
**.so",RTLD_LAZY);
if(handle)
{
put("sada");
}
}
请问网上说的添加-ldl该在哪里添加 我建的工程没有makefile文件 那么在工程属性的哪个地方添加 谢谢

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 16:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是关于如何正确地在C++程序中使用dlerror函数。dlerror是一个标准库函数,它用于从动态链接库(如.so)中获取错误信息。

    首先,你需要确保你的项目已经编译和链接成功。如果还没有这样做,请按照以下步骤进行:

    1. 编译你的源代码:

      g++ -o program program.cpp
      
    2. 运行编译后的程序:

      ./program
      
    3. 检查是否得到正确的输出。

    4. 如果你在运行过程中遇到了错误,你可以打印出dlerror的信息来查看错误原因。

    如果你是在Linux系统上运行这个程序,那么你应该能看到类似这样的错误消息:

    /home/user/program: error while loading shared libraries: libfoo.so.1: cannot open shared object file: No such file or directory
    

    这表明你的动态链接库(例如.so文件)无法打开或找不到。

    为了解决这个问题,你需要将动态链接库添加到你的路径中。通常情况下,你可以在你的/etc/ld.so.conf文件中添加你的动态链接库的目录,然后重新加载你的.so文件:

    sudo nano /etc/ld.so.conf.d/usr/local/lib.so.conf
    

    添加如下内容:

    /usr/local/lib/
    

    保存并退出编辑器。

    然后,你需要重新加载你的动态链接库:

    sudo ldconfig
    

    现在,你的动态链接库应该可以被找到并使用了。如果你仍然遇到问题,可能是因为你的动态链接库不是可执行的,或者它被放置在了不适当的目录下。在这种情况下,你可能需要修改你的动态链接库的权限,并将其放在一个易于访问的位置。

    最后,如果你正在使用Makefile来构建你的项目,你需要在Makefile中添加一条命令来自动处理这个问题。例如:

    .PHONY all
    all:
        $(MAKE) -C program
    

    这样,在每次构建时,都会自动检查动态链接库是否存在,并将其添加到PATH环境变量中。

    评论

报告相同问题?