Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56012
  • 博文数量: 9
  • 博客积分: 269
  • 博客等级: 二等列兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 09:43
文章分类

全部博文(9)

文章存档

2012年(2)

2011年(6)

2010年(1)

分类:

2010-05-13 10:54:36

    在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;
 
阅读(2384) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:django 多国语言支持

给主人留下些什么吧!~~