【问题标题】:How to change version information of *.a files after compilation编译后如何更改 *.a 文件的版本信息
【发布时间】:2010-02-23 09:37:56
【问题描述】:

我想知道有什么方法(如果可能的话),在编译后更改 Unix 中 *.a 文件的版本信息。 我知道如何在 Windows 中处理 Dll 文件 - 但不知道如何在 Unix 中管理它。

谢谢大家!

【问题讨论】:

  • 你在说什么“版本信息”?哪个工具会显示它?

标签: linux unix makefile


【解决方案1】:

静态库只是 .o 文件的存档 - 它们不会自己嵌入版本,除非您的代码以某种方式发布了包含版本信息的符号。

喜欢:

int libFoo_version = 0x01000000;

或者你可以使用

char* libFoo_version = "1.0";

然后使用类似strings libFoo.a | grep libFoo_version 命令和sed 来更改版本信息。

另一种选择是在存档中嵌入一个空文件,该文件的名称包含版本信息。 YMMV

【讨论】:

  • 谢谢,但最终用户如何知道其中包含版本信息?我必须明确提及吗?没有通用的方法吗?
  • 没有通用的方法。您可能需要提供一个 API 来检索版本信息。
  • 我不这么认为。据我记得,ranlib 已集成到 ar 中,这让我认为它无法解决您的问题。
【解决方案2】:

静态库本身没有版本信息。

【讨论】:

    【解决方案3】:

    如果版本是源代码的一部分(例如,字符串常量),那么如果新版本的长度与旧版本相同,您可以简单地使用sed 更改它。

    【讨论】:

    • 嗨,有人告诉我,ranlib 可以完成这项工作。这是正确的吗?谢谢!
    • ranlib 只是在库中创建符号的索引(相当于ar -s)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    相关资源
    最近更新 更多