objcopy&&rc.exe

来源:互联网 发布:mysql default value 编辑:程序博客网 时间:2024/06/11 00:02
39人阅读 评论(0)收藏 举报

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

http://rnd-oj.xxxxxxx.com/exam/HomePage 

原创粉丝点击