一尘不染

如何将版本信息嵌入共享库和二进制文件?

linux

在Linux上,是否可以将版本信息嵌入到ELF二进制文件中?我想在编译时嵌入此信息,以便稍后可以使用脚本将其提取。一种骇人听闻的方法是植入可以使用strings命令提取的内容。是否有更常规的方法,类似于Windows
DLL的Visual Studio工厂版本信息(注意DLL属性中的版本选项卡)?


阅读 271

收藏
2020-06-07

共1个答案

一尘不染

如果使用cvs或subversion,执行此操作的一种方法是在源文件中使用特殊格式的特殊id字符串。然后在cvs或svn中添加一个预提交钩子,以在提交更改时使用文件的新版本更新该特殊变量。然后,在构建二进制文件时,可以使用ident提取该信息。例如:

在您的cpp文件中添加以下内容:

static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";

并且在程序上运行ident(可以通过安装rcs找到),应该显示有关其中包含id字符串的文件的信息。

ident program
program:
    $Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $

注意
正如人们在评论中提到的那样,该技术是过时的。让源代码管理系统自动更改源代码是很丑陋的,并且自从cvs成为唯一选择以来,源代码管理已得到改善,这意味着您可以找到一种更好的方法来实现相同的目标。

2020-06-07