Pei He <hepeim...@gmail.com> wrote:

> The extension functions was developed by C++ mixed with C.
> ERROR:  incompatible library
> "/home/hepei/bin/Chameleon/lib/libspgist_trie.so": missing magic block
> HINT:  Extension libraries are required to use the PG_MODULE_MAGIC macro.

You can use extern "C" blocks for PG_MODULE_MAGIC, PG_FUNCTION_INFO_V1,
and function declarations:

    extern "C"
    {
    #include "postgres.h"
    #include "fmgr.h"

    PG_MODULE_MAGIC;

    PG_FUNCTION_INFO_V1(your_function);
    extern Datum your_function(PG_FUNCTION_ARGS);
    }

However, you should very carefully use C++ exceptions and destructors
in your module because PostgreSQL uses siglongjmp; C++ unwind semantics
don't work on postgres' errors. You cannot use those C++ features and
postgres' APIs together.

Regards,
---
Takahiro Itagaki
NTT Open Source Software Center



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to