Tizen gcc 汇编程序生成 ELF 而不是目标文件——无法创建静态库
Tizen gcc assembler generating ELFs instead of object files -- cannot create static library
我正在尝试使用 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
传递给编译器时,我可以看到没有调用 linker。那么为什么是 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 文件,而且它似乎 link 它们正确。但是我仍然需要能够生成真实的目标文件,以便可以将它们归档到具有 libtool
的静态库中。有什么建议吗?
is generating ELF files rather than object files,
你非常困惑:ELF
和目标文件不排斥,Linux 全部目标文件是 ELF
。换句话说,这是按预期工作的。
ELF
文件可以有不同的类型:ET_REL
(可重定位 object 文件),ET_DYN
(共享库)和 ET_EXEC
(可执行文件)。
I still need to be able to generate real object files so that they can be archived into a static library with libtool
问题可能是 libtool
无法将非本地 ELF
.o
文件识别为可以放入存档库的文件。
一般来说,libtool
几乎总是 错误的 解决问题的方法,无论问题是什么。它的 stated goal 是 "hide the complexity of using shared libraries behind a consistent, portable interface"。根据我的经验,它在所有平台上都无法实现该目标。
当然,如果您 只是 想将一堆 .o
文件放入存档库,正确的方法是简单地使用 *-linux-gnueabi-ar
应该没问题。
我正在尝试使用 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
传递给编译器时,我可以看到没有调用 linker。那么为什么是 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 文件,而且它似乎 link 它们正确。但是我仍然需要能够生成真实的目标文件,以便可以将它们归档到具有 libtool
的静态库中。有什么建议吗?
is generating ELF files rather than object files,
你非常困惑:ELF
和目标文件不排斥,Linux 全部目标文件是 ELF
。换句话说,这是按预期工作的。
ELF
文件可以有不同的类型:ET_REL
(可重定位 object 文件),ET_DYN
(共享库)和 ET_EXEC
(可执行文件)。
I still need to be able to generate real object files so that they can be archived into a static library with libtool
问题可能是 libtool
无法将非本地 ELF
.o
文件识别为可以放入存档库的文件。
一般来说,libtool
几乎总是 错误的 解决问题的方法,无论问题是什么。它的 stated goal 是 "hide the complexity of using shared libraries behind a consistent, portable interface"。根据我的经验,它在所有平台上都无法实现该目标。
当然,如果您 只是 想将一堆 .o
文件放入存档库,正确的方法是简单地使用 *-linux-gnueabi-ar
应该没问题。