c++ - Linux 上的共享库版本和可执行文件

标签 c++ linux shared-libraries versioning executable

让我们描述以下场景:


我打算为 Linux 平台创建一个应用程序

该应用程序将包含一个核心共享/动态可执行文件。该库将像一个引擎一样,提供常见且必要的类和函数。

现在,我知道库和可执行文件可能会随着时间的推移而改变,我想确保每个可执行文件都知道它的库是什么,如果库版本不同,它将显示一条有关库是两个的消息old(这可以是一个常量,遵守 ABI 规则,它将始终包含该版本,并将在入口点开始时根据可执行文件的版本进行检查)。

我已阅读 ABI 规范和规则,但我不喜欢它们(太严格)。我不想在用户系统上有一个库,我会更新它并尝试与旧的可执行文件保持兼容。我更喜欢,因为我不知道界面将如何改变,并且我想保留自己以后进行任何更改的自由,让每个可执行文件在用户的计算机上都有自己的库版本。例如:

  • 今天,用户下载了可执行文件“MyApp1”和库“MyCoreLib”的版本 1.0.0
  • 一周后,我基于新版本的库创建了一个新应用程序。用户下载“MyCoreLib”库的版本1.1.0和一个名为“MyApp2”的新可执行文件。因此,我们有 2 个不同的可执行文件和同一库(相同名称)的两个不同版本。
  • “MyApp1”仍应链接到“MyCoreLib”的版本 1.0.0,而“MyApp2”应链接到新版本 1.1.0
  • 一周后,我基于旧版本的库1.0.0创建了一个新应用程序。由于该库已存在于用户的计算机上,因此我们将使用它。
  • 现在我们有两个使用库的第一个版本的可执行文件和一个使用较新版本的可执行文件,依此类推。

在 Linux 中,版本号位于 .so 库的末尾。这是否使我们有可能拥有同一库的多个版本,并且每个可执行文件链接到其自己的库版本

最佳答案

关于c++ - Linux 上的共享库版本和可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23017726/

相关文章:

php - UTF-8贯穿始终

linux - 使用 sed 执行替换时丢失制表符和换行符

c++ - 二进制输入输出问题

c++ - 访问 typedef 映射结构中的成员?

c++ - 需要读取空格和其他字符 C++

linux - 模块化内核 vs 微内核/单片内核

c++ - 如何在可执行共享库 (.so) 中触发全局变量的 c'tors?

maven - Gradle 兼容的 Maven 存储库或本地使用的替代方案

c++ - 编译失败,出现 "relocation R_X86_64_32 against ` .rodata.str1。 8' can not be used when making a shared object"

python - 使用python事件并与c++交互