Я использую Turbo C ++ 3.1.
У меня есть несколько сборочных модулей, которые требуют 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, статически или динамически. Тогда ваш объектный файл сборки должен иметь доступ к нему, когда он будет связан с конечным исполняемым файлом.