Re: server-side extension in c++

From: Craig Ringer <craig(at)postnewspapers(dot)com(dot)au>
To: Igor <igor(at)carcass(dot)ath(dot)cx>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: server-side extension in c++
Date: 2010-03-24 04:13:57
Message-ID: 4BA99185.5030304@postnewspapers.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Igor wrote:
> Hi All,
>
> Is there an easy way to add c++ files to my simple pgsql module ? My Makefile
> is as follows -
>
> ===
> MODULES = pg_uservars
> DATA_built = pg_uservars.sql
> PGXS := $(shell pg_config --pgxs)
> include $(PGXS)
> ===
>
> I've got "pg_uservars.c" and "hv.cc" and I'd like to compile hv.cc via g++.
> I'm aware of c++ name [de]mangling, just looking if there's a standard way of
> using C++ when it comes to pgxs.

It should "just work". Simply make sure to follow the usual rules for
calling into C++ code from C and vice versa:

- Use "extern C" linkage for all functions that must be accessible by
dlopen(), and preferably also for any functions that you might take
a function pointer to and pass to C code

- Never return new()'d memory that might be free()'d by the C code; use
malloc()

- Never delete() memory that was malloc()'d by the C code; use free()

- Never let an exception propagate into the C code; use a catch-all
block at the top level of all "extern C" functions

... and probably other things I've missed.

--
Craig Ringer

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Craig Ringer 2010-03-24 04:30:31 Re: Avoiding deadlocks on mass delete / update
Previous Message Dean Rasheed 2010-03-23 19:15:07 Re: Help me with this multi-table query