当前位置: 首页 > 面试题库 >

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

秋煌
2023-03-14
问题内容

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


问题答案:

如果使用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成为唯一选择以来,源代码管理已得到改善,这意味着您可以找到一种更好的方法来实现相同的目标。



 类似资料:
  • 问题内容: 我有一些从Go程序中读取的文本文件。我想提供一个可执行文件,而无需另外提供该文本文件。如何将其嵌入Windows和Linux上的编译中? 问题答案: 使用go-bindata。从自述文件: 该工具可将任何文件转换为可管理的Go源代码。对于将二进制数据嵌入到go程序中很有用。在转换为原始字节片之前,可以选择对文件数据进行gzip压缩。

  • 问题内容: Windows提供了用于应用程序和DLL版本信息的资源文件。资源文件包括版本,版权和制造商等信息。 我们有一个共享库,并且喜欢添加版本信息。我们如何在带有共享库的Linux上做到这一点? 问题答案: 简短的版本是您通过库的名称执行此操作。阅读http://tldp.org/HOWTO/Program- Library-HOWTO/shared-libraries.html的 第3章以及

  • 除了独具特色的“Fork + Pull”的分布式工作模式,GitHub同样支持传统的集中式协同工作模式。 4.2.1. 版本库授权 GitHub可以通过多种途径为版本库授权,让版本库成为多人共享的版本库,从而让项目管理者围绕项目创建一个核心开发团队。下面以gotgithub账号下的helloworld版本库为例,介绍如何设置版本库的多人共享。 进入gotgithub/helloworld项目的管理

  • 问题内容: 我有两个用Java编写的应用程序,它们通过网络使用XML消息相互通信。我在接收端使用了SAX解析器,以从消息中获取数据。要求之一是将二进制数据嵌入XML消息中,但是SAX不喜欢这样。有谁知道如何做到这一点? 问题答案: XML是如此多才多艺… XML就像暴力-如果它不能解决问题,则说明你使用的不够多。 编辑: 顺便说一句:Base64 + CDATA可能是最好的解决方案

  • 问题内容: 我的意思是gcc是否可以将某些源代码版本的infor作为部分或类似内容插入到ELF二进制文件中。我不想更改我的源文件,但是在Makefile中使用gcc选项添加了一些信息。 问题答案: 您可以将版本信息发送到文本文件中,然后将该文本文件转换为目标文件,然后将其静态链接到可执行文件中。 第一步很简单,但是您必须编写一些代码:脚本或类似的东西,以您喜欢的纯文本文件格式书写版本信息。然后ve

  • 问题内容: 这可能是一个非常业余的问题。我正在尝试将静态文件嵌入到二进制文件中。html。如何使用https://github.com/jteeuwen/go- bindata 做到这一点? 因此,我可以使用此https://github.com/jteeuwen/go-bindata#accessing-an- asset 访问资产,但是该如何处理“数据”,以及如何解析文件,执行模板以及服务他们