c - GCC 的纯数据静态库

标签 c gcc resources build ld

如何创建仅包含二进制数据(没有任何目标代码)的静态库,并使该数据可用于 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/

相关文章:

c - 关于将 char 数组复制到 char 指针的基本 C 问题

我们可以用 GCC 的内联函数来做到这一点吗?

android - Android资源的命名规则

c# - 如何从 C# 应用程序输出资源文件?

android - 本地化和可绘制对象

c++ - 未命名结构的编译器重新排序

c - 为什么要排列代码长度代码(动态霍夫曼代码 | RFC-1951)?

python - 有没有工具可以将用 C 编写的数学公式转换为 Python?

linux - 安装Android-EABI工具链时,是否可以覆盖/usr中的文件?

c++ - 英特尔 TBB 与 CilkPlus