Turbo C++:为 malloc 函数生成目标代码

Turbo C++: Generate object code for malloc function

本文关键字:目标 代码 函数 malloc C++ Turbo      更新时间:2023-10-16

我正在使用 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 

如果您确实希望在目标文件中使用 Turbo C++ 的malloc,您将使用 tlib 从标准库中提取该对象文件。顺便说一句,我不记得给tlib任何确定的标志,也不记得标准库的文件名称,但两者都应该很容易找到。

不过,您实际上并不需要这样做:如果您只是在命令行上使用tcc,它将编译并链接您从标准库中使用的模块,所有这些都是自动的。不过,您只需要在 C 中使用至少一个文件 - malloc取决于 C 启动代码中发生的一些初始化,因此即使您成功链接它,如果没有该启动代码,它实际上也不会工作。

malloc() 是 C(或 C++)运行时库的一部分。 你也许能够告诉链接器静态链接 C 运行时(通常称为 CRT),但通常它是动态链接的,以便可执行文件的大小更小。 在任何情况下,您通常都无法选择将运行时的 malloc() 实现内置到单独的对象文件中。 当然,如果您实现自己的版本,它将是目标文件的一部分。 在这种情况下,您的实现将覆盖系统的实现。

所以我想你应该寻找的是某种方法来告诉链接器你想与 C 运行时库链接,无论是静态还是动态。 然后,程序集对象文件在链接到最终可执行文件时应有权访问它。