c++ - mipsel-linux-objdump 无法识别 mipsel-linux-g++ 对象

标签 c++ linux gcc embedded openwrt

我正在使用 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/

相关文章:

c++ - Boost read_json 和 write_json 对属性树不等价

c++ - C++ 中的引用不明确

c++ - 实现虚函数时未定义对 vtable 的引用

c - 宏依赖宏

c++ - 使用正确的编译器标志在每个平台上进行相同的模拟

c++ - Qt/C++ : Centralise parameters in one class

c - 如何区分可执行文件和自动运行文件

c++ - Linux - 动态和静态加载时调用相同的函数

c++ - 使用时钟计算时间的值为零 - linux

c - 在二进制文件的最开始放置一个函数