[英]How to know if one shared library depends on another shared library or not?
[英]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
放入库搜索路径中, libparent
在libdependent
文件中根本没有对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.