我用这个命令链接了一些文本文件: ld -r -b binary -o resources1.o * .txt我得到一个文件resources.o与此内容: nm resources1.o00000018 D _binary_texto4_txt_end…
文件内容有一个愚蠢的错误。它们是具有不同名称的同一文件(复制和粘贴错误),因此在显示其内容时,它似乎是内存偏移错误。
到现在为止,我正在使用下一个脚本来编译“libResources.a”库中的所有资源:
rm libResources.a rm names.txt basedir=$1 for dir in "$basedir"/*; do if test -d "$dir"; then rm "$dir"/*.o ld -r -b binary -o "$dir"/resources.o "$dir"/* nm "$dir"/resources.o >> names.txt fi done for dir in "$basedir"/*; do if test -d "$dir"; then ar q libResources.a "$dir"/*.o fi done
要测试我的硬编码资源,我使用以下C代码:
/* ============================================================================ Name : linkerTest.c ============================================================================ */ #include <stdio.h> #include <stdlib.h> extern char _binary___textos1_texto1_txt_start[]; extern char _binary___textos1_texto1_txt_end[]; extern char _binary___textos2_texto4_txt_start[]; extern char _binary___textos2_texto4_txt_end[]; int main(void) { int i; int sizeTexto1 = _binary___textos1_texto1_txt_end - _binary___textos1_texto1_txt_start; int sizeTexto4 = _binary___textos2_texto4_txt_end - _binary___textos2_texto4_txt_start; for (i=0;i<sizeTexto1;i++){ putchar(_binary___textos1_texto1_txt_start[i]); } for (i=0;i<sizeTexto4;i++){ putchar(_binary___textos2_texto4_txt_start[i]); } return EXIT_SUCCESS; }
如果您想测试我的示例,请不要忘记在项目中链接文件“libResources.a”。