linux下将资源文件编进可执行文件

有时候需要将一些图片, 音乐或者字符串文件随可执行文件一起打包发布。可以用objcopy命令。

1. 准备资源文件

    文件名:strings.txt

    内容: well done!

2. 准备C文件

    文件名:  main.c

    内容:

  1 #include <stdio.h>
  2 void main()
  3 {
  4     char *p = "well";
  5     printf("%s\n", p);
  6 }
3. 资源文件打包

  objcopy -I binary -O elf64-x86-64 -B i386 strings.txt strings.o

  注意: 我pc是64位系统, 不同平台,参数不一样,具体用法请man objcopy


  nm strings.o 查看导出符号

 000000000000000b D _binary_strings_txt_end
 000000000000000b A _binary_strings_txt_size
 0000000000000000 D _binary_strings_txt_start
  这个导出符号其实是有规律的。。。

 

 objdump -t strings.o 查看保存在哪个段

SYMBOL TABLE:
0000000000000000 l    d  .data	0000000000000000 .data
0000000000000000 g       .data	0000000000000000 _binary_strings_txt_start
000000000000000b g       .data	0000000000000000 _binary_strings_txt_end
000000000000000b g       *ABS*	0000000000000000 _binary_strings_txt_size
data段,即是全局变量。

4. 修改main.c文件,

   #include <stdio.h>
   extern char _binary_strings_txt_start[];
   extern char _binary_strings_txt_size[];
   
   void main()
   {
       char *p = "well";
       printf("%s\n", p);
       printf("%s\n", _binary_strings_txt_start);
       int len = (int)_binary_strings_txt_size;
       printf("len=%d\n", len);
   }

5. 编译链接

  gcc main.c -c

  gcc main.o  strings.o -o main


6. 运行结果

well
well done!

len=11


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值