Название может быть не очень четким, поэтому, возможно, лучше объяснить, что я пытаюсь сделать.
У меня есть (C) разделяемая библиотека, которая используется несколькими моими приложениями.Теперь я хочу использовать функции в моей общей библиотеке в PostgreSQL, поэтому я пишу библиотеку расширений для PostgreSQL (v8.4).
Чтобы предотвратить дублирование кода (следуя философии DRY), я хочубиблиотека расширений, чтобы быть просто тонким API вокруг основной разделяемой библиотеки, которую я описал выше.В этом и заключается проблема.
В моей основной библиотеке я делаю МНОГИЕ вызовы функций памяти mgmt (в основном это calloc и realloc).PostgreSQL, с другой стороны, имеет свои собственные функции управления памятью, такие как palloc, pfree и т. Д.
В идеале я хочу, чтобы библиотека расширения PG вызывала ядро lib.Когда выполняются вызовы PG, я хочу, чтобы основная библиотека использовала функции mem из postgresql, а когда мои другие приложения вызывают функции, я хочу, чтобы основная библиотека использовала стандартные функции C mem.
Я нене знаю, возможно ли это (это, безусловно, избавило бы меня от необходимости дублировать весь существующий код для базовой библиотеки).Я думаю, что добавление некоторых определений в заголовочный файл базовой библиотеки выглядит следующим образом:
#ifdef BUILDING_PG_XTLIB
#define calloc palloc0
#define realloc prealloc
#define free pfree
#endif
, а затем перекомпилируется основная библиотека.Однако, подумав позже, я понимаю, что это решает проблему во время компиляции, а не во время выполнения (если я не ошибаюсь), поэтому у меня закончились идеи о том, как решить эту проблему.
быть сделано?Если да, то как?