我正在使用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
答案 0 :(得分:2)
如果你真的想在目标文件中使用Turbo C ++的malloc
,你将使用tlib
从标准库中提取该目标文件。我不记得有任何确定性给予tlib
的标志,也不记得标准库文件的名称,但两者都应该很容易找到。
您实际上并不需要这样做:如果您只是在命令行上使用tcc
,它将自动编译并链接您从标准库中使用的模块。你只需要在C中使用至少一个文件 - malloc
取决于C启动代码中发生的一些初始化,所以即使你成功地链接它,没有那个启动代码它也不会实际工作
答案 1 :(得分:1)
malloc()是C(或C ++)运行时库的一部分。您可能能够告诉链接器静态链接C运行时(通常称为CRT),但通常它是动态链接的,以便可执行文件的大小更小。在任何情况下,您通常都没有选择将运行时的malloc()实现内置到单独的目标文件中。当然,如果您实现自己的版本,它将成为您的目标文件的一部分。在这种情况下,您的实现会覆盖系统的实现。
所以我想你应该寻找的是通过静态或动态告诉链接器你想要与C运行时库链接的一些方法。然后,当汇编对象文件链接到最终的可执行文件时,它应该可以访问它。