Using C++ with CREATE FUNCTION
От | Mike Mascari |
---|---|
Тема | Using C++ with CREATE FUNCTION |
Дата | |
Msg-id | 3CFD8ABF.10E1392D@mascari.com обсуждение исходный текст |
Список | pgsql-general |
I'm having a bit of trouble getting a shared module written in C++ to load correctly with CREATE FUNCTION. The C source is: #include "postgres.h" #include <string.h> #include "fmgr.h" PG_FUNCTION_INFO_V1(echo); Datum echo(PG_FUNCTION_ARGS) { text *t1 = (text *) PG_GETARG_TEXT_P(0); text *tr; tr = (text *) palloc(VARSIZE(t1)); VARATT_SIZEP(tr) = VARSIZE(t1); memcpy(VARDATA(tr), VARDATA(t1), VARSIZE(t1) - VARHDRSZ); PG_RETURN_TEXT_P(tr); } I compile with: cc -fPIC -c textutils.c -I/usr/include/pgsql/server cc -shared -o pgblade.so textutils.o cp pgblade.so /usr/local/mascari/lib I create the function as: CREATE FUNCTION echo(text) RETURNS text AS '/usr/local/mascari/lib/pgblade.so' LANGUAGE 'c' WITH (isStrict); and SELECT echo('Hello, World'); works as expected. However, if I: 1. Prevent name mangling by adding: extern "C" { Datum echo(PG_FUNCTION_ARGS); }; 2. Rename textutils.c to textutils.cxx 3. Recompile with the same commands and drop/create the function as the above, I get: template1=# select echo('Hello, World'); server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Failed. Any tips? This is: Linux 2.2.19 PostgreSQL 7.2 egcs-2.91.66 Mike Mascari mascarm@mascari.com
В списке pgsql-general по дате отправления: