Можно ли иметь одну C (разделяемую) библиотеку с несколькими функциями памяти mgmt? - PullRequest
0 голосов
/ 05 января 2012

Название может быть не очень четким, поэтому, возможно, лучше объяснить, что я пытаюсь сделать.

У меня есть (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

, а затем перекомпилируется основная библиотека.Однако, подумав позже, я понимаю, что это решает проблему во время компиляции, а не во время выполнения (если я не ошибаюсь), поэтому у меня закончились идеи о том, как решить эту проблему.

быть сделано?Если да, то как?

...