質問

.objファイルのためのC ++のヘッダファイルを生成する方法はありますか?それとも.OBJファイルを表示できるユーティリティがあります。 Iすでにフォーマット間の変換が、私はどの.hの発電機/ビューアます。

を見つけることができないということobjconv見つけました
役に立ちましたか?

解決

C ++タグを考えると、状況はかなり他の回答の一部として絶望的として暗示されていません。

具体的には、少なくともほとんどのC ++コンパイラで、関数の名前は、その関数が取るパラメータを示すために、(Microsoftが「飾ら」と呼んでいます)マングルされます。マングリング方式は、コンパイラから別のものに変化していますが、関数の宣言を再作成するために、本質的にそれらのいずれかが十分な情報を符号化する - 戻り値の型、関数自体の名前を、クラス名には、メンバ関数だ場合、および正確な数及びパラメータの種類機能と予想している。

それは名前をマングリングによって行われなければならないだろうけど、C ++システムは、本当の選択肢を持っていませんが、オブジェクト・ファイル内のパラメータ情報を含めること。あなたは関数をオーバーロードすると、リンカは、特定のコールでリンクアップしている過負荷を整理するためにいくつかの方法が必要です。

ただ、たとえば、コードはテンプレートが含まれている場合、オブジェクトファイル内のシンボル名はをアウト拡大するすべての -

私はすべてのアウトこれをソートするのに仕事のかなりあり得ることを追加する必要があります(デフォルトパラメータを含む)、テンプレートパラメータ。ただ、例えば、次のようなコードの些細なビットを考慮します:

#include <vector>
#include <string>

std::vector<std::string> x;
私はVC ++でこれをコンパイルして、dumpbin /symbols foo.objを行うと、

は、出力は75キロバイト程度です。私のソースコードのみが1つのシンボルを定義するために表示されていても、オブジェクトファイルは私がすべてで書いたものにほぼ完全に無関係なそれらの多くは、約180シンボルの定義が含まれています。

は、オブジェクト・ファイルがデバッグ情報を用いてコンパイルされた場合、その意志(通常は)だけでなく、オブジェクト・ファイル内の実質的により多くの種類の情報(など)を生成することを言及する価値もあります。

他のヒント

私はあなたがWindows上だと仮定してあなたの質問はvisual-c++でタグ付けされます。

オブジェクトファイルにソースコードをコンパイルしながら、ヘッダファイル内の情報の(おそらく大部分の)多くがドロップされるので、元のヘッダは、オブジェクトファイルからファイルの生成は、可能ではない。

しかし、あなたは非常に低いレベルのオブジェクト・ファイルを検査するdumpbinユーティリティを使用することができます。あなたにも面白いかもしれませんオブジェクト・ファイル内の情報のみの存在は、指定されたオブジェクトファイルで定義されているシンボル名のリストです。あなたはかかわらず、オブジェクト・ファイルから任意の型情報を取得することはできません。あなたが与えられた関数が取るかを期待値の種類を伝えることができないようにします。

(すべての引数がスタックを経由して関数に渡されます)いくつかの状況では、

あなたはおそらく機能コードの開始を解体し、どのように多くの値をカウントすることで、機能を期待は、(スタックからポップされた引数の数を言うことができます)。しかしほとんどの場合でその意志はない仕事ます。

.objファイルは、ヘッダファイルに必要となるすべての情報が含まれていないとして、

は、ヘッダ生成器が存在することはできません。 .objファイルをダンプするとして、それを行うためのツールは、コンパイラ依存することになります。これを行うにはGCC関連のツールは、 objdumpはこちらます。

であります
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top