【发布时间】:2016-10-12 13:27:36
【问题描述】:
我正在尝试使用 Tizen 工具集构建 zlib。作为构建过程的一部分,源文件应该用arm-linux-gnu-eabi-gcc -c 编译成对象,然后用libtool 组合成一个存档,但是libtool 失败并抱怨每个.o 文件传递给它is not an object file (not allowed in a library)。
经过检查,我发现arm-linux-gnu-eabi-gcc -c 正在生成 ELF 文件而不是目标文件,这是我以前从未见过的。当我将-c -v 传递给编译器时,我可以看到链接器没有被调用。那么为什么是 ELF 格式呢?
然后我尝试调用arm-linux-gnu-eabi-gcc -S,然后调用arm-linux-gnu-eabi-as,发现汇编程序本身正在生成ELF文件。
这是一个例子:
% echo "int main(void) { return 0; }" > main.c
% arm-linux-gnueabi-gcc main.c -S -o main.s
% arm-linux-gnueabi-as main.s -o main.o
% file main.o
main.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
Tizen 工具集包括四个编译器({i386,arm} 和 {4.6,4.9})。所有四个的行为方式都相同。
至少这个arm-linux-gnueabi-gcc 是一致的,因为我可以将许多.o ELF 文件传递给它,并且它似乎可以正确链接它们。但我仍然需要能够生成真实的目标文件,以便它们可以使用libtool 归档到静态库中。有什么建议吗?
【问题讨论】:
标签: gcc static-libraries elf tizen