0

OpenWrtツールチェーンを使用して、C ライブラリを利用する C++ アプリケーションを構築していますが、それが関連しているとは思えません。

私は 2 つのファイル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

ポインタはありますか?:)

4

1 に答える 1

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.hELF object にコンパイルできるようにするつもりなら、代わりfile.oに名前を付けてください。file.c

于 2012-06-03T04:20:45.993 に答える