0

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

它返回精灵对象的标头

当我跑

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

任何指针?:)

4

1 回答 1

1

gcc ... -c 文件.h -o 文件.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

于 2012-06-03T04:20:45.993 回答