Я хочу использовать функции из библиотеки stdio.h для манипулирования некоторыми строками в функции PostgreSQL C.Проблема: по какой-то причине, когда я пытаюсь импортировать его в базу данных с CREATE EXTENSION
, происходит сбой и возвращается: ERROR: could not load library "/usr/local/lib/postgresql/test.so": Error relocating /usr/local/lib/postgresql/test.so: __sprintf_chk: symbol not found
.Вот тестовая функция, которую я использую:
#define _XOPEN_SOURCE
#include "postgres.h"
#include "fmgr.h"
#include "funcapi.h"
#include "executor/executor.h"
#include "executor/spi.h"
#include "utils/builtins.h"
#include <stdlib.h>
#include <stdio.h>
PG_FUNCTION_INFO_V1(printTest);
Datum printTest(PG_FUNCTION_ARGS) {
char str[50];
int i = 9;
sprintf(str, "Hello I am PostgreSQL %d ! \n", i);
PG_RETURN_TEXT_P(cstring_to_text(str));
}
А вот мой Makefile:
PG_CPPFLAGS = -I$(/usr/include)
SHLIB_LINK = $(stdio.h)
EXTENSION = test
DATA = test--0.1.sql
MODULE_big = test
OBJS = test.o
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
Я использую PostgreSQL 9.6 внутри контейнера Docker.
Я ужебыла такая проблема с другой библиотекой, и решением было изменить make-файл.Я пытался сделать это и в этот раз, но это не сработало, и я не знаю, что еще можно изменить.
Если вы знаете, что может быть причиной проблемы, очень рады.
Если вы знаете название книги или веб-сайта, который предлагает хорошую документацию о том, как писать функции C для Postgres, вам даже больше рады.Я постоянно сталкиваюсь с такими глупыми проблемами, потому что официальная документация слишком слабая.