- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我想在我的 C 可执行文件中嵌入一个名为 data
的文件。
google 出来的结果是this linuxjournal page它说像这样使用 objdump
objcopy --input binary \
--output elf32-i386 \
--binary-architecture i386 data data.o
然而,这取决于计算机的体系结构,例如,当从上一个命令编译对象时,它给出 输入文件“data.o”的 i386 体系结构与 i386:x86-64 输出不兼容
,我必须更改参数。
但是使用 unix 工具 xxd , 我可以简单地用无符号字符数组中的数据和一个整数及其长度制作一个 c 源代码,并使用与设备无关的编译命令获得相同的结果。
data.o: data.c
gcc -c data.c
data.c: data
xxd -i data > data.c
首选方法是什么?为什么?
最佳答案
xxd
不是标准的 UNIX 工具。它实际上是 VIM 的一部分,用于实现其十六进制编辑器功能。 VIM 是一个可选工具,并非普遍可用。
另一方面,GNU objcopy
是 GNU binutils 的一部分,通常预装在所有 GNU 系统上。
一般来说,当需要将二进制文件包含到程序中时,比 objcopy
更喜欢简单的东西(就像您使用 xxd
所做的那样)。主要是因为 objcopy
的文档严重不足,给人的印象是 BFD
(binutils 的底层库)是一个未经修饰的前端。另一个原因是,除了 .c
文件,您还可以创建 .h
文件,并将生成的文件作为项目的组成部分。
您链接的文章已经包含许多如何完成该操作的示例。可能为此目的最流行的工具是 hexdump
,几乎所有系统都预装了它。例如,从我的头顶:
# .c
echo 'char data[] = {' > data.c
hexdump -v -e '1/1 "0x%02X,"' < data.bin >> data.c
echo >> data.c
echo '};' >> data.c
echo 'size_t data_size = sizeof(data);'
# .h
echo 'extern char data[];' > data.h
echo 'extern size_t data_size;' >> data.h
关于c - 使用 objcopy 和将文件 xxding 到 c 源代码中的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174772/
假设我想在我的 C 可执行文件中嵌入一个名为 data 的文件。 google 出来的结果是this linuxjournal page它说像这样使用 objdump objcopy --input
我是一名优秀的程序员,十分优秀!