【发布时间】:2018-11-12 21:59:47
【问题描述】:
在LJ post 中,--defsym 标志用于将构建日期传递到源代码中:
#include <stdio.h>
extern char __BUILD_DATE;
void main(void) {
printf("Build date: %u\n", (unsigned long) &__BUILD_DATE);
}
通过与以下标志链接:
gcc example.c -Xlinker --defsym -Xlinker __BUILD_DATE=$(date +%Y%m%d)
根据ld manual,
--defsym symbol=expression在输出文件中创建一个全局符号,包含表达式给出的绝对地址。
我正在尝试理解以下内容:
- 构建日期的 9 个字符的字符串 (
YYYYmmdd+\0) 如何存储在内存中? - 如果
--defsym创建一个包含地址的符号,为什么__BUILD_DATE被定义为字符而不是指针或整数类型? - 如果
__BUILD_DATE最终被转换为unsigned long,为什么__BUILD_DATE被定义为char而不是unsigned long?
【问题讨论】:
-
这对我来说像是 3 个问题。不是一个。也许您想发布 3 个单独的问题..?
-
@JesperJuhl 我认为这是关于
--defsym用法的一个问题的三个小部分。拆分问题对我来说毫无意义。 -
“如果 __BUILD_DATE 最终被转换为 unsigned long,为什么它被定义为 char 而不是 unsigned long?”恕我直言,绝对是一个独立的问题。正如“如果 --defsym 创建一个包含地址的符号,为什么 __BUILD_DATE 被定义为 char 而不是指针或整数类型?”。但是,那可能只是我。