如何在静态库中存储版本号?

2023-11-23

如何将版本号存储在静态库 (file.a) 中,然后在 Linux 中检查其版本?

附:我需要能够随时检查文件的版本,而无需仅使用 shell 实用程序使用任何特殊的可执行文件。


除了提供 Puppe 提到的静态字符串之外,通常的做法是提供一个宏来检索版本检查兼容性。例如,您可以具有以下宏(在头文件中声明以与您的库一起使用):

#define MYLIB_MAJOR_VERSION 1
#define MYLIB_MINOR_VERSION 2
#define MYLIB_REVISION 3
#define MYLIB_VERSION "1.2.3"
#define MYLIB_VERSION_CHECK(maj, min) ((maj==MYLIB_MAJOR_VERSION) && (min<=MYLIB_MINOR_VERSION))

通知与MYLIB_CHECK_VERSION宏,我假设您想要一个特定的主要转速和一个次要转速大于或等于您所需的版本。根据您的应用程序的需要进行更改。

然后从调用应用程序中使用它,例如:

if (! MYLIB_VERSION_CHECK(1, 2)) {
    fprintf(stderr, "ERROR: incompatible library version\n");
    exit(-1);
}

这种方法将使版本信息来自包含的头文件。此外,它将在编译时针对调用应用程序进行优化。再做一点工作,您就可以从库本身中提取它。继续阅读...

您还可以使用此信息创建存储在库中的静态字符串,如 Puppe 所提到的。在你的库中放置这样的东西:

struct {
    const char* string;
    const unsigned major;
    const unsigned minor;
    const unsigned revision;
} mylib_version = {
    MYLIB_VERSION, MYLIB_MAJOR_VERSION, MYLIB_MINOR_VERSION, MYLIB_REVISION
};

这将创建一个名为的结构mylib_version在你的图书馆里。您可以使用它通过在库中创建函数并从调用应用程序访问这些函数等来进行进一步的验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在静态库中存储版本号? 的相关文章

随机推荐

  • 如何让对话框样式的活动窗口填满屏幕?

    我正在使用一个带有对话框主题集的活动 并且我希望它是全屏的 我尝试了各种各样的方法 甚至通过 WindowManager 手动将窗口扩展到完整的宽度和高度 但没有任何效果 显然 对话框窗口 或具有对话框主题的活动 只会根据其内容扩展 但即使
  • 如何在 readthedocs 上记录 cython 函数

    On 阅读文档我不被允许编译cython扩展 是否可以配置sphinx为了从中提取文档字符串cython文件而不实际编译它们 thanks 我遇到了同样的问题 发现现在可以在 readthedocs 上编译 Cython 扩展 简短回答 可
  • “__cplusplus”宏扩展为什么?

    C 宏有什么作用 cplusplus包含并扩展到 有没有宏 cplusplus即使在最古老的 C 实现中 也始终包含并扩展为numeric value 使用安全吗 if cplusplus或者我们应该用它来代替 ifdef cplusplu
  • Mac 开发的 PyObjc 与 RubyCocoa:哪个更成熟?

    我一直想尝试一下 Ruby 或 Python 同时我也一直想做一些 Cocoa 编程 因此 我认为实现这两个目标的最佳方法是使用 Ruby 或 Python 到 Objective C 的桥梁 PyObjc 或 RubyCocoa 来开发一
  • Quartz Scheduler 关闭后不停止

    我在 jboss 4 0 5 上使用当前最新的quartz 1 8 3 石英作业是持久的并保存到本地数据库中 当我在执行的石英调度程序对象上调用 shutdown 或standby 方法时 作业仍然由调度程序继续执行 只是作业状态为空并且执
  • 状态 Property 中的令牌 PropertyName 将导致无效的 JSON 对象。使用自定义 JsonConverter

    我正在尝试使用 Json NET 和自定义序列化程序序列化 反序列化 NET 数据集 我知道你们中的许多人会告诉我不要这样做 我在其他帖子上看到过这一点 我有充分的理由并希望继续沿着这条路走 我的序列化基于以下事实 NET DataSet
  • 获取 Django url 模板标签中 javascript 变量的值

    众所周知 有一种通过使用 django 模板标签 url 定向到 URL 的 DRY 方式 例如 url someview arg1 X 在这里 我希望 X 是 JavaScript 变量的值 例如tmp 但以下不起作用 我应该如何获取模板
  • 使用 AutoMapper 映射未知类型

    我在用着AutoMapper将一个对象的属性复制到另一个对象 这是我的代码 Get type and create first object Type itemType Type GetType itemTypeName var item
  • Android 6.0 Adb wifi 连接

    我有一台装有 Android 6 0 的 Nexus 6 设备 库存版本无需 root 为了避免用 USB 电缆永久连接设备 我使用了这个程序 我通过 USB 电缆将设备连接到 PC 在终端上输入adb tcpip 5555 type ad
  • 以字符串形式返回 Matplotlib 图像

    我在 django 应用程序中使用 matplotlib 想直接返回渲染的图像 到目前为止我可以走plt savefig 然后返回图像的位置 我想做的是 return HttpResponse plt renderfig mimetype
  • 使用正则表达式 re.sub 删除指定单词之前的所有内容(包括指定单词)

    我有一个字符串 看起来像 Blah blah blah 更新 2012 年 8 月 23 日 我想使用正则表达式从中提取日期Aug 23 2012 我在书库里找到一篇文章 内容类似 正则表达式删除字符之前的所有文本 但是当我尝试时这也不起作
  • Windows 上的信号处理

    我有一个独立的 PHP 脚本 我将处理从 Windows 操作系统发送的信号 以便在发出 终止信号 时正常关闭 我怎样才能在 Windows 上做到这一点 2020 年 3 月更新 从 PHP 7 4 开始 有sapi windows se
  • IBM Websphere:Spring AOP 出现错误

    我在启动服务器时收到以下错误 应用程序中包含 Spring 和 AspectJ 类 Caused by java lang VerifyError JVMVRFY013 class loading constraint violated c
  • 在 IE6 中调试 JavaScript [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个可以调试 JavaScript 的工具withinIE6 我的意思是我希望调试器在浏览器中运行 a l 萤火虫 到目前为止我已经尝试过
  • Dojo AMD:无法在 require 中调用函数

    我确实是 dojo 的新手 但当我开始使用 dojo 版本 1 7 2 开发新应用程序时 我也想使用新的 AMD 函数语法 不幸的是我似乎不明白 最让我烦恼的是我不能简单地调用 require 块内的任何函数 例如 我有一个页面 打开时会创
  • 按下后退按钮时如何保留可滚动区域的滚动位置?

    我在一个大的可滚动 div 中有一长串链接 每次当用户单击链接然后单击后退按钮时 它都会从 div 的最顶部开始 这对我们的用户来说并不友好 有什么方法可以让浏览器在按后退按钮时滚动到上一个位置 非常感谢 在页面卸载期间 获取滚动位置并将其
  • pyplot:以 e 为基数的 loglog()

    Python 和 matplotlib 新手是从 R 过来的 所以我希望这个问题不是太白痴 我正在尝试在自然对数刻度上绘制对数对数图 但经过一番谷歌搜索后 我无法弄清楚如何强制 pyplot 在轴上使用基本 e 刻度 我目前拥有的代码 im
  • 在 Tensorflow 中使用字符串标签

    我仍在尝试使用自己的图像数据运行 Tensorflow 我能够使用此示例中的conevert to 函数创建一个 tfrecords文件link 现在我想用该示例中的代码来训练网络link 但在 read and decode 函数中失败
  • 如何序列化第三方不可序列化的最终类(例如google的LatLng类)?

    我在用着Google 的 LatLng 类来自 v2 Google Play 服务 该特定类是最终类 未实现java io Serializable 有什么办法可以做到吗LatLng类工具Serializable public class
  • 如何在静态库中存储版本号?

    如何将版本号存储在静态库 file a 中 然后在 Linux 中检查其版本 附 我需要能够随时检查文件的版本 而无需仅使用 shell 实用程序使用任何特殊的可执行文件 除了提供 Puppe 提到的静态字符串之外 通常的做法是提供一个宏来