c++ - 如何加载带有后缀的库

标签 c++ linux shared-libraries dlopen

我需要使用 dlopen 加载预安装的共享对象。说它有名字 somelib.so

在某些系统上,有几个链接的库:somelib.so、somelib.so.1、somelib.so.321.1

在其他系统上只有没有链接的库:somelib.so.321.1 如何正确加载这个库?

我使用名称“somelib.so”执行 dlopen,这仅适用于存在此链接的系统。

如果系统中不存在默认链接('somelib.so'),是否是搜索库全名的唯一选项?

最佳答案

这取决于上下文:旨在通过 dlopen 加载的插件通常没有版本号,例如 /usr/libexec/apache2/mod_something.so

普通共享库通常有以下版本:

libfoo.so.Majorversion.Minoversion
libfoo.so.Majorversion
libfoo so

Minorversion 部分可以更改,恕不另行通知,这意味着兼容 更改。如果 Majorversion 部分发生变化,则它(可能)是一个不兼容 的变化。所以我建议你在 dlopen 中使用第二个版本,例如 libz.so.1 而不是 libz.solibz.so.1.2.11 .

(为了更难,Majorversion和Minorversion都可以结构化,例如Major='1.1' Minor='1.a')

关于c++ - 如何加载带有后缀的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54060316/

相关文章:

c++ - waf 找不到现有库

c++ - Qt 使用 QNetworkReply 获取外部 IP 地址

c++ - 从共享库调用带有 STL 参数的函数

c++ - 实例化可变参数函数模板时出现奇怪的编译错误

linux - 如何在 openldap 复制(synrepl)中使用 slapadd 添加条目

linux - 我如何获得由 grub2 以与发行版无关的方式加载为根设备的 cpio 归档文件制成的 initrd?

使用 C 创建一个 tar.gz 文件

c++ - 将共享库相互链接共享库 C++

c++ - FFmpeg编译opus错误

c++ - "Incorrect string value"用于波兰语字符(QSqlTableModel、MySQL)