gpt4 book ai didi

c++ - 使用 ld 创建依赖于另一个共享库的共享库

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:53 25 4
gpt4 key购买 nike

我想创建一个共享库 libdependent,它使用头文件从 libparent 导出某些函数。

libparent 的路径在构建阶段是未知的,所以我不能使用 rpath,我调用了 dlopen("path/libparent. so", RLTD_NOW | RTLD_GLOBAL)dlopen("path/libdependent.so", RLTD_NOW | RTLD_GLOBAL) 在运行时。

但是,如果我在链接期间将 libparent.so 放入库搜索路径,则 libdependent 文件中根本没有对 libparent 的引用,并且使用 -lparent

当我尝试 dlopen libdependent 时,我收到“找不到符号”错误,即使设置了 RTLD_GLOBAL

我应该怎么做才能在不调用 dlsym 的情况下使用 libparent 的导出?

最佳答案

首先,当你想创建一个库时,你不必导入它,所以

dlopen("path/libdependent.so", RLTD_NOW | RTLD_GLOBAL)

不需要。

其次,如果您不知道要使用的库的确切名称 (libparent),则必须使用动态链接和 dlopen。在动态链接中,您不必通知链接器有关您的 libparent 库的信息,但您必须使用动态链接器库,因此链接器命令将如下所示:

g++ -o output -dl input.cpp

dl 表示您将使用 dlopen

使用程序时,请确保您的 libparent.so 在运行目录中可见(或使用绝对路径)。还要检查 dlopen 的返回值以了解库打开是否成功。

    void *handle = NULL;
handle = dlopen("libparent.so", RTLD_LAZY);
if(!handle){
printf("Error!\r\n");
}

希望对您有所帮助。

关于c++ - 使用 ld 创建依赖于另一个共享库的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18712472/

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