Вопрос о переопределении функций стандартной библиотеки C и о том, как связать все вместе

Я сделал свою собственную реализацию _init, malloc, free (и других).

Внутри этих функций я использую библиотеку dlfcn.h (dlopen, dlsym и т.д.) для вызова актуальных стандартных версий. Затем я помещаю в один файл и компилирую их как общую библиотеку (memory.so). Когда я хочу запустить исполняемый файл и заставить его вызывать мои версии этих функций, я просто устанавливаю LD_PRELOAD = memory.so.

Проблема в том, что у меня есть ряд других модулей, от которых зависит memory.c. К ним относятся файл, содержащий функции для сканирования файлов elf (symbols.c) и моя собственная реализация хеш-таблицы (hashtable.c), которую я использую для отслеживания утечек памяти среди прочего.

У меня вопрос, есть ли способ отдельно скомпилировать hashtable.c и symbols.c, чтобы любые ссылки на malloc разрешались с помощью стандартной библиотеки, а не с теми, что включены в memory.c. Конечно, я мог бы использовать библиотеки dlfcn.h для всего, от чего зависит memory.c, но я бы предпочел их, если бы был способ избежать этого.

Я до сих пор не совсем понял, как работает связывание, поэтому любая помощь будет признательна.

Спасибо

5
задан SpotsWood 7 March 2011 в 19:05
поделиться