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

如果您真的希望 Turbo C++malloc包含在目标文件中,您将使用tlib从标准库中提取该目标文件。临时我不记得要给出的标志,也不记得tlib标准库的文件名,但两者都应该很容易找到。

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

于 2012-12-08T01:16:00.213 回答
1

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

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

于 2012-12-08T01:09:47.940 回答