我正在使用 OpenWrt toolchain构建一个使用 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
它返回 Sprite 对象的头部
当我运行时
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
。
关于c++ - mipsel-linux-objdump 无法识别 mipsel-linux-g++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867007/