2

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

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

但是,如果我在链接和使用过程中放入库搜索路径,则根本没有对libparentin libdependentfile 的引用。libparent.so-lparent

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

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

4

2 回答 2

1

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

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

不需要。

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

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

dl说你将使用dlopen

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

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

希望能帮助到你。

于 2013-09-10T07:54:10.577 回答
0

通过添加-shared到链接器选项并在-l. -(也很有用。

于 2013-09-10T10:58:01.733 回答