2012-01-03 12 views
1

私は次のシグネチャ持っている(32ビット)NASMに多くの機能を実装したいと思います:私は、オブジェクトファイルを作成し、静的にリンクできるようにしたいその後nasmでスタティックライブラリを作成してgccとリンクするにはどうしたらいいですか?

int function1(); 
int function2(); 

など

をgccでコンパイルされたC++プログラム。私はintを返す関数の実装例を探しています。シンボルをエクスポートするのに必要な追加コードと、NASMが静的にリンクできる.aファイルを生成するコマンドラインを探しています。前もって感謝します。

+0

NASMは.aファイルを生成しませんが、arを使って.oファイルを.oファイルから簡単に作ることはできます。そして、必ずしも.aファイルをリンクする必要はありません。 .oファイルを直接リンクすることができます。ですから、アセンブリ関数をgcc呼び出し規約と互換性を持たせる方法を知っておく必要があると思います。おそらく 'extern" C "'をプロトタイプに書いておきましょう。 http://wiki.osdev.org/C%2B%2B_to_ASM_linkage_in_GCC –

答えて

2

アセンブラはオブジェクトファイルを出力します。リンク時に使用するだけです(NASMオプションは覚えていませんのでそのまま使用しないでください - nasm foo.asm -o foo.o; g++ -o prog foo.o bar.cppなど)。

静的ライブラリは、オブジェクトファイルの派手なアーカイブ(拡張子.a)です。 binutilsには、単一のオブジェクトを実際にアーカイブにまとめる場合には、arユーティリティがあります。

+0

extern "C"宣言として使用できるように関数を(nasmコードから)エクスポートするにはどうすればいいですか? –

+0

@TamásSzelei:NASMのドキュメントを読む、私は思い出すことができません。とにかく、アセンブリの中に何かを書くことはおそらく悪い考えです。 –

+0

それは私が質問した理由のようなものです。私はドキュメンテーションで関連する部分を見つけることができませんでした。アドバイスをいただきありがとうございます。私はそうする理由があります(パフォーマンスではありません)。 –