如何创建仅包含二进制数据(没有任何目标代码)的静态库,并使该数据可用于 C 程序?这是构建过程和我正在努力工作的简化代码:
./数据文件
:
abcdefghij
生成文件
:
libdatafile.a:
ar [magic] datafile
main: libdatafile.a
gcc main.c libdatafile.a -o main
main.c
:
#define TEXTPTR [more magic]
int main(){
char mystring[11];
memset(mystring, '\0', 11);
memcpy(TEXTPTR, mystring, 10);
puts(mystring);
puts(mystring);
return 0;
}
我期望运行 main
的输出当然是:
abcdefghijabcdefghij
我的问题是:[magic] 和 [more magic] 应该是什么?
最佳答案
您可以使用 objcopy 将二进制文件转换为 .o 文件;然后生成的文件定义二进制数据的起始地址、结束地址和大小的符号。
objcopy -I binary -O elf32-little data data.o
数据可以通过程序引用
extern char const _binary_data_start[];
extern char const _binary_data_end[];
数据位于这两个指针之间(请注意,将它们声明为指针不起作用)。
“elf32-little”部分需要根据您的目标平台进行调整。还有许多其他选项可用于对处理进行精细控制。
关于c - GCC 的纯数据静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235013/