我的意思是GCC是否可以插入一些源代码版本的Infor为ELF二进制的部分或类似的东西。 我不想改变我的源文件,但添加在Makefile中GCC选项的一些信息。
Answer 1:
您可以发出你的版本信息到一个文本文件,然后打开该文本文件成目标文件然后您可以静态链接到你的可执行文件。
第一步很简单,但你必须写一些代码:一个脚本或东西写在你喜欢一个纯文本文件,任何格式的版本信息。 然后写makefile规则,以从version.txt version.o说,使用objcopy命令 。 现在你要在它定义了两个有用符号的目标文件:文本版本信息的开始和结束。 生成对象添加到您的可执行文件,然后你就可以访问该版本有两种方式:通过运行strings
,或通过在应用程序打印版本字符串编写代码的二进制文件(你需要声明的开始和端的符号,在某些头文件变量)。
Answer 2:
如果你不介意改变你的源文件只有一次,添加如下内容:
const volatile static char version[] = VERSION;
和编译:
gcc -c -DVERSION='"1.2.3"'
该volatile
保持GCC从更高优化级别上移除的字符串。
由于写的,如果你忘了这不会编译-D
选项,这可以是好还是坏取决于你的需求。
Answer 3:
即使你没有访问源了,你可以用这个选项链接对象:
gcc -Wl,--defsym,VERSION_1_2_3=0 prog.o -o prog
你可以检查它hexdump -C prog | less
hexdump -C prog | less
和寻找VERSION
添加到您makefile
并且一定要知道什么时候一个程序被编译:
BUILD = $(shell date +"%Y%m%d_%H%M%S")
LDLIBS = -Wl,--defsym,BUILD_$(BUILD)=0
Answer 4:
随着GNU连接器ld可以使用
--version-script=version-scriptfile
阅读更多有关命令行选项: 使用LD,GNU链接器-选项
了解更多关于在创建版本脚本: 使用LD,GNU链接-版本脚本
让我提醒你,虽然,它不是弱者以!
文章来源: Does gcc have any options to add version info in ELF binary file?