Thread: Missing declaration of _PG_init()
I am writing an extension. The docs describe a _PG_init function that will be called upon
loading the shared library (https://www.postgresql.org/docs/12/xfunc-c.html). I include
postgres.h and fmgr.h, but on compilation, _PG_init has not been declared. Grepping the postgres source, _PG_init appears to be involved in programming language extensions, and the function is declared in plpgsql.h. Looking at various contrib modules, I see
loading the shared library (https://www.postgresql.org/docs/12/xfunc-c.html). I include
postgres.h and fmgr.h, but on compilation, _PG_init has not been declared. Grepping the postgres source, _PG_init appears to be involved in programming language extensions, and the function is declared in plpgsql.h. Looking at various contrib modules, I see
explicit declarations of _PG_init(void).
Should _PG_init(void) be declared in someplace included by postgres.h or fmgr.h?
Jack Orenstein
On Fri, 2021-01-08 at 09:49 -0500, Jack Orenstein wrote: > I am writing an extension. The docs describe a _PG_init function that will be called upon > loading the shared library (https://www.postgresql.org/docs/12/xfunc-c.html). I include > postgres.h and fmgr.h, but on compilation, _PG_init has not been declared. > Grepping the postgres source, _PG_init appears to be involved in programming language > extensions, and the function is declared in plpgsql.h. Looking at various contrib modules, I see > explicit declarations of _PG_init(void). > > Should _PG_init(void) be declared in someplace included by postgres.h or fmgr.h? It is provided by your module, so it must be declared by your module: extern void _PG_init(void); Yours, Laurenz Albe -- Cybertec | https://www.cybertec-postgresql.com
Jack Orenstein <jao@geophile.com> writes: > Should _PG_init(void) be declared in someplace included by postgres.h or > fmgr.h? No, because it's something a given module might or might not provide. Also, a global extern might give the impression that this was a global function that the core code provides, rather than a per-module function. regards, tom lane