将编译时信息嵌入二进制文件中

时间:2015-06-26 19:38:16

标签: c gcc time linker

假设我有一个变量日期,用源代码中的extern定义,即extern date; 然后我想在链接时为它分配一个值,从编译它的计算机中获取时间并分配给日期变量。 有没有办法在gcc中做到这一点?

2 个答案:

答案 0 :(得分:1)

您要找的是__TIME____DATE__吗?

如果编译和链接是您的方案中的一个步骤,您可以让编译器和链接器用日期和时间替换这些宏。如果编译一天并链接另一个,这将无法工作,因为编译器(更好:预处理器)决定插入哪个值。

在stackoverflow上查看this或其他帖子。

答案 1 :(得分:1)

可以在link命令之前将日期命令输出的日期变量输出到gcc中,因此变量日期包含当前的链接日期和时间。 gcc从C的管道读取源代码的选项是-xc -

/* hello.c */
#include <stdio.h>

int main(void)
{
    extern char const date[];

    printf("Hello, link date is %s\n", date);
    return 0;
}

$ gcc -c hello.c
$ echo "char const date[] =\"`date`\";" | gcc -c -xc - -o date.o;gcc hello.o date.o
$ ./a.out
Hello, link date is Sat Jun 27 11:59:19 CEST 2015
$