Re: Load C++ for functions? - Mailing list pgsql-general

From Craig Ringer
Subject Re: Load C++ for functions?
Date
Msg-id 4D149080.5040808@postnewspapers.com.au
Whole thread Raw
In response to Load C++ for functions?  (Elliot Chance <elliotchance@gmail.com>)
List pgsql-general
On 12/24/2010 10:29 PM, Elliot Chance wrote:

> But the CREATE FUNCTION gives the error:
> ERROR:  could not load library "/storage/Scripts/pgx/pgx.so": /storage/Scripts/pgx/pgx.so: undefined symbol:
__gxx_personality_v0

How'd you build the C++ code? What was your compile command line? Does
'ldd pgx.so' list libstdc++ as a dependency? Are you for some reason
compiling with -fno-exceptions? Is every single one of your C++
functions wrapped with an unconditional try/catch that converts any
exceptions to error return codes/Pg elog() calls?

I've written Pg extension modules, but I've always done so by compiling
the component containing PG_MODULE_MAGIC, PG_FUNCTION_INFO_V1,
PG_FUNCTION_ARGS, etc as regular C, and having it call "extern C"
functions in the C++ files linked into the shared object. I don't
*think* this should make any difference, but I'm far from a C/C++ expert.

> Postgres is no doubt trying to load a C++ linked library as C - is there a way to fix this?

AFAIK, dlopen() doesn't care if a library is C, C++, or BlueLanguage, so
long as it provides standard ELF symbols and a C-compatible entry point.

--
Craig Ringer

pgsql-general by date:

Previous
From: Elliot Chance
Date:
Subject: Re: Load C++ for functions?
Next
From: Craig Ringer
Date:
Subject: Re: Load C++ for functions?