Если у вас есть контроль над исходным кодом, который должен использовать эту библиотеку, здесь есть одна возможность.Используйте разные имена функций: вместо malloc, например, назовите его newCoolMalloc.Этот метод иногда проще и не зависит от специальных параметров компоновщика.
Затем в своем коде используйте #define
, чтобы код вызывал нужный набор функций.Вы можете #define malloc быть чем-то другим.Например:
#define malloc newCoolMalloc
#define free newCoolFree
Если вы делаете это, вы должны быть очень и очень осторожны, чтобы включать это последовательно.В противном случае вы рискуете использовать stdlib malloc в одном месте, а затем и свой бесплатный в другом, что приведет к грязным ошибкам.Один из способов помочь смягчить эту ситуацию - это (если возможно) в своем собственном коде использовать пользовательские имена для функций выделения и освобождения.Тогда легче убедиться, что вызывается правильный.Вы можете определить различные пользовательские имена для своих собственных функций malloc или даже для исходных функций malloc stdlib.
Например, вы можете использовать mallocPlaceHolder в качестве фактического имени в коде:
someThing = mallocPlaceHolder( nbytes );
Тогда ваши определения будут выглядеть примерно так:
#define mallocPlaceHolder myCoolMalloc
Если нетФункция вида mallocPlaceHolder (и связанная с ней свободная) фактически существует, она позволяет избежать смешивания разных библиотек.