繁体   English   中英

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

[英]Creating shared library that depends on another shared library using ld

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

libparent的路径在构建阶段未知,因此我不能使用rpath ,而是调用dlopen("path/libparent.so", RLTD_NOW | RTLD_GLOBAL)dlopen("path/libdependent.so", RLTD_NOW | RTLD_GLOBAL)

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

当我尝试dlopen libdependent ,即使设置了RTLD_GLOBAL ,我libdependent收到“无法定位符号”错误。

我应该如何使用libparent而不调用dlsym

首先,当您要创建库时,无需导入它,因此

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

不需要。

其次,如果您不确定要使用的库名(libparent),则必须使用动态链接和dlopen 在动态链接中,您不必向链接程序通知您的libparent库,但是您必须使用动态链接程序库,因此链接程序命令将如下所示:

g ++ -o输出-dl input.cpp

dl表示您将使用dlopen

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

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

希望能帮助到你。

通过在链接器选项中添加-shared并在-l指定库来解决。 -(也可能有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM