在Linux上,是否可以将版本信息嵌入到ELF二进制文件中?我想在编译时嵌入此信息,以便稍后可以使用脚本将其提取。一种骇人听闻的方法是植入可以使用strings命令提取的内容。是否有更常规的方法,类似于Windows DLL的Visual Studio工厂版本信息(注意DLL属性中的版本选项卡)?
strings
如果使用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成为唯一选择以来,源代码管理已得到改善,这意味着您可以找到一种更好的方法来实现相同的目标。