【发布时间】:2019-01-18 12:03:53
【问题描述】:
我正在尝试将一个名为 window.ui 的文件嵌入到我的 C 可执行文件中,目的是稍后从代码中访问内容:
objcopy --input binary \
--output elf32-i386 \
--binary-architecture i386 ../src/window.ui ../window.ui.o
gcc `pkg-config --cflags gtk+-3.0` \
../src/*.c \
../*.o \
`pkg-config --libs gtk+-3.0` \
-o ../a.out
编译时,GCC 失败并出现以下错误:
/usr/bin/x86_64-linux-gnu-ld: i386 architecture of input file `../window.ui.o' is incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status
有没有办法强制 GCC 仍然包含该文件?
我也试过objcopy 和--output elf64-x86-64,编译正确但是阅读时内容是乱码。
原来guide给了我灵感
【问题讨论】:
-
你是如何创建
window.ui.o的?链接器需要地址信息才能将其放入可执行文件中。 -
@FiddlingBits 我正在使用问题中提到的
objcopy --input binary --output elf32-i386 --binary-architecture i386 ../src/window.ui ../window.ui.o命令创建window.ui.o。 -
... 什么是
window.ui?我完全不明白你为什么使用objcopy。 -
@TypeIA
window.ui是一个用于 Gtk 的 UI 设计的 XML 文件。我正在尝试将它嵌入到可执行文件中,因为它在运行时需要。 -
我明白了。这是一种非常邪恶的嵌入资源的方法。链接器的输入文件都必须具有相同的架构。您的系统是 x86_64,这就是
ld试图为其生成输出,但您给它的是i386输入。将--output标志更改为objcopy为x86-64,您应该会得到更好的结果。