我正在使用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
返回精灵对象的标题
当我跑步时
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
任何指针? :)
答案 0 :(得分:1)
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
。