Mipsel-Linux-G++ 对象无法被 Mipsel-Linux-objdump 识别

mipsel-linux-g++ object not recognized by mipsel-linux-objdump

本文关键字:Mipsel-Linux-objdump 识别 对象 Mipsel-Linux-G++      更新时间:2023-10-16

我正在使用OpenWrt工具链来构建一个C++应用程序,该应用程序使用C库,但我怀疑这是否相关。

我有两个文件file.h(其中包含一个C++类以及实现)和使用该类main.cpp

首先,我尝试从file.h创建一个对象

 mipsel-linux-g++ -Wall -c -Ipath_to/staging_dir_mipsel/include -Ipath_to/staging_dir_mipsel/usr/incude file.h -o file.o

这不会给出错误并创建目标文件。我对main.cpp做同样的事情,但在将它们链接在一起时遇到了问题。

当我跑步时

mipsel-linux-readelf -h main.o

它返回 elf 对象的标头

当我跑步时

mipsel-linux-readelf -h file.o

它返回

readelf: Error: Unable to read in 0x2d78 bytes of section headers
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start

有什么指示吗?:)

gcc ... -c file.h -o file.o

将 C 代码放入头文件中,并尝试以上述方式将其编译为目标代码是非常不寻常的。

事实上,这太不寻常了,GCC在上面给出的命令中没有这样做。相反,它将file.h编译成预编译标头(通常称为 .gch ,但被您不幸的-o选项强制调用.o)。

因此,file.o不是ELF文件也就不足为奇了。只需运行file file.o,看看它是否打印GCC precompiled header (version 013) for C或类似的东西。

如果您真的打算file.h可编译为 ELF 对象file.o,请将其命名为 file.c