把图片或任意文件直接编译进可执行程序

在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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值