Turbo C ++: генерация объектного кода для функции malloc

Я использую 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

0

Решение

Если вы действительно хотите Turbo C ++ malloc в объектном файле вы будете использовать tlib извлечь этот объектный файл из стандартной библиотеки. Вручную я не помню флаг, чтобы дать tlib с какой-либо определенностью, ни именем файла для стандартной библиотеки, но оба должны быть довольно легко найти.

Вы действительно не должны делать это, хотя: если вы просто используете tcc в командной строке он автоматически скомпилирует и свяжет модули, которые вы использовали из стандартной библиотеки. Вам действительно нужно использовать хотя бы один файл в C, хотя — malloc зависит от некоторой инициализации, которая происходит в коде запуска C, так что даже если вы успешно скомпонуете его, без этого кода запуска он фактически не будет работать.

2

Другие решения

malloc () является частью библиотеки времени выполнения C (или C ++). Возможно, вы сможете указать своему компоновщику статически связать среду выполнения C (часто называемую CRT), но обычно он связан динамически, так что размер вашего исполняемого файла меньше. В любом случае у вас обычно нет возможности встроить реализацию malloc () среды выполнения в отдельный объектный файл. Конечно, если вы реализуете свою собственную версию, она будет частью вашего объектного файла. В этом случае ваша реализация переопределяет реализацию системы.

Так что я думаю, что вам нужно искать какой-то способ сообщить компоновщику, что вы хотите связать с библиотекой времени выполнения C, статически или динамически. Тогда ваш объектный файл сборки должен иметь доступ к нему, когда он будет связан с конечным исполняемым файлом.

1

По вопросам рекламы [email protected]