0

Turbo C++3.1を使用しています。

C標準ライブラリのmallocを必要とするアセンブリモジュールがいくつかあります。だから私は私の.asmファイルに私が持っています:

extern _malloc:proc

malloc()を含むオブジェクトファイルを生成したいと思います。リンカを使用して実行可能ファイルを作成するため。例:

tasm /zi bmlib.asm  // create object file: bmlib.obj
tasm /zi bmlibt.asm // create object (which contains main program): bmlibt.obj
? //Generate object file for malloc: malloc.obj
tlink /v3 bmlibt bmlib malloc // link all modules
bmlibt.exe // Execute the program 
4

2 に答える 2

2

mallocオブジェクトファイルにTurboC++が本当に必要な場合は、を使用tlibして、標準ライブラリからそのオブジェクトファイルを抽出します。オフハンド私は確実に与えるフラグtlibも、標準ライブラリのファイル名も覚えていませんが、どちらもかなり簡単に見つけることができるはずです。

ただし、実際にこれを行う必要はありません。tccコマンドラインで使用するだけで、標準ライブラリから使用したモジュールがすべて自動的にコンパイルおよびリンクされます。ただし、Cで少なくとも1つのファイルを使用する必要がありますmalloc。これは、Cのスタートアップコードで発生する初期化に依存するため、正常にリンクしても、そのスタートアップコードがないと実際には機能しません。

于 2012-12-08T01:16:00.213 に答える
1

malloc()は、C(またはC ++)ランタイムライブラリの一部です。リンカにCランタイム(多くの場合CRTと呼ばれる)を静的にリンクするように指示できる場合がありますが、通常は動的にリンクされるため、実行可能ファイルのサイズは小さくなります。いずれの場合も、通常、ランタイムのmalloc()実装を別のオブジェクトファイルに組み込むオプションはありません。もちろん、独自のバージョンを実装する場合は、オブジェクトファイルの一部になります。その場合、実装はシステムの実装をオーバーライドします。

したがって、探しているのは、静的または動的にCランタイムライブラリとリンクするリンカーに指示する方法だと思います。次に、アセンブリオブジェクトファイルは、最終的な実行可能ファイルにリンクされたときにアクセスできる必要があります。

于 2012-12-08T01:09:47.940 に答える