如何把普通文件链接到程序中?
·
hev
Windows 系统编程中经常把资源(图标、图片、声音等等)链接到程序中,并在程序中访问。 Linux 系统里这种用法好像并不常见。下面我以一个实例来说明如题把普通文件“编译”成目标文件并链接到程序中,以及在程序中访问这些数据。
我们 Grance.jpg 链接到程序中,程序执行时把图片写出到 /tmp/temp.jpg
heihaier@heihaier:~/pic$ ls -l
total 324
-rw-r--r-- 1 heihaier heihaier 326342 2009-05-29 09:06 Grace.jpg
把图片“编译”成目标文件。
objcopy -I binary -O elf32-tradlittlemips -B mips Grace.jpg Grace.o
具体用法可以看 man objcopy。
查看符号信息。
heihaier@heihaier:~/pic$ nm Grace.o
0004fac6 D _binary_Grace_jpg_end
0004fac6 A _binary_Grace_jpg_size
00000000 D _binary_Grace_jpg_start
程序代码
/* test.c */
#include
int main(int argc, char * argv[])
{
extern char _binary_Grace_jpg_size;
extern char _binary_Grace_jpg_start;
char * p = &_binary_Grace_jpg_start;
FILE * f = fopen("/tmp/temp.jpg", "w+");
if(f)
{
fwrite(p, sizeof(char), (size_t)&_binary_Grace_jpg_size, f);
fclose(f);
}
return 0;
}
编译命令
gcc test.c Grace.o -o test