【发布时间】:2019-02-23 18:22:15
【问题描述】:
我使用 'ld -r -b binary -o binary.o foo.jpeg' 在我的程序中嵌入资源。效果很好。我只是想知道为什么 int _binary_size 符号永远不会正确读取,负数或太大的数字,但在程序运行之间保持不变。 我总是要做_binary_end - _binary_start,它完美无缺。它似乎对任何人都不起作用...like here .... 为什么会这样?
没有理由不使用 end-start,因为它取代了大小符号,但它仍然让我感到好奇。
编辑:代码示例。
extern const unsigned char _binary_scna4_jpg_start;
extern const unsigned char _binary_scna4_jpg_end;
extern const int _binary_scna4_jpg_size;
int size = &_binary_scna4_jpg_end - &_binary_scna4_jpg_start;
printf("Size is %d vs %d \n", size, _binary_scna4_jpg_size);
打印出来:
Size is 1192071 vs -385906356
第一个数字是二进制文件的正确大小,我的所有图像都可以完美读取。
用于良好测量的 nm 输出:
0000000000123087 D _binary_scna4_jpg_end
0000000000123087 A _binary_scna4_jpg_size
0000000000000000 D _binary_scna4_jpg_start
【问题讨论】:
-
你能展示你尝试使用_binary_size的代码吗?
-
@n.m.编辑问题以包含代码示例