Tizen gcc汇编程序生成ELF而不是对象文件--无法创建静态库

Tizen gcc汇编程序生成ELF而不是对象文件--无法创建静态库,gcc,static-libraries,elf,tizen,Gcc,Static Libraries,Elf,Tizen,我正在尝试使用该工具集构建zlib。作为构建过程的一部分,源文件应该使用arm linux gnu eabi gcc-c编译成对象,然后与libtool合并成归档文件,但是libtool失败,并抱怨传递给它的.o文件不是对象文件(库中不允许) 经过检查,我发现armlinuxgnueabigcc-c正在生成ELF文件而不是对象文件,这是我以前从未见过的。当我将-c-v传递给编译器时,我可以看到链接器没有被调用。那么为什么使用ELF格式呢 然后,我尝试调用arm linux gnu eabi gc

我正在尝试使用该工具集构建zlib。作为构建过程的一部分,源文件应该使用
arm linux gnu eabi gcc-c
编译成对象,然后与
libtool
合并成归档文件,但是
libtool
失败,并抱怨传递给它的
.o
文件不是对象文件(库中不允许)

经过检查,我发现
armlinuxgnueabigcc-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})。这四个人的行为方式都一样

至少这个
armlinuxgnueabigcc
是一致的,因为我可以向它传递许多
.o
ELF文件,并且它似乎可以正确地链接它们。但我仍然需要能够生成真实的对象文件,以便可以使用
libtool
将它们归档到静态库中。有什么建议吗

正在生成ELF文件而不是对象文件

您非常困惑:
ELF
和对象文件不是独占的,在Linux上所有的对象文件都是
ELF
。换言之,这是工作的预期

ELF
文件可以有不同的类型:
ET_REL
(可重新定位的对象文件)、
ET_DYN
(共享库)和
ET_EXEC
(可执行文件)

我仍然需要能够生成真实的对象文件,以便使用libtool将它们归档到静态库中

问题可能是
libtool
无法识别非本地
ELF
.o
文件,因为它可以将这些文件放入存档库中

一般来说,
libtool
几乎总是问题的错误解决方案,不管问题是什么。其目的是“在一致、可移植的界面后面隐藏使用共享库的复杂性”。根据我的经验,它在所有平台上都无法实现这一目标


当然,如果您只想将一堆
.o
文件放入存档库,正确的方法是简单地使用
*-linux-gnueabi-ar
,这应该没有问题。

关于
libtool
的有趣想法。我自己并没有真正使用过它,但许多项目似乎都在使用它,我在这里使用它只是因为
zlib
想要它。我想我知道对象是
ELF
文件,但在构建过程中却忘了这一点。谢谢你的解释。我最终解决了这个问题,确保正确定义了环境变量
AR
,以便
libtool
可以调用您提到的非本机
AR