在Windows下可以通过生成资源文件把图片等文件直接编译进程序,在Linux如何完成这件事呢?
要把文件直接编译进目标程序,首先要把它转为对应的目标文件的格式,才能链接进程序,linux有两个工具可以完成这件事情:ld 和 objcopy。
举例说明,现在有foo.jpg图片要编译进程序test.c
ld版本:
ld -r -b binary foo.jpg -o foo.ld
gcc test.c foo.ld -o test
objcopy版本:
objcopy -I binary -O elf32-i386 -B i386 foo.jpg jpg.o
gcc test.c foo.o -o test
按照上边命令执行仅仅是把文件编译进程序了,如何引用它呢?
这两个工具生成的目标文件都遵循相同的符号命名规则,会生成以下三个符号:
_binary_foo_jpg _start :图片的开始地址
_binary_foo_jpg _end :图片的的末端过一位置
_binary_foo_jpg _size :图片的大小,强转为size_t使用
红色部分是文件名,点被转为下划线,在程序中直接extern这三个符号就可以使用了,
extern char _binary_foo_jpg _start[];
extern char _binary_foo_jpg _end[];
extern char _binary_foo_jpg _size[];
图片的大小有两种方法获得:
size_t picSize1 = (size_t)_binary_foo_jpg _size;
size_t picSize2 = _binary_foo_jpg _end - _binary_foo_jpg _start;
把图片或任意文件直接编译进可执行程序
最新推荐文章于 2023-04-21 23:11:27 发布