Re: Compiling C Extension Functions against PostgreSQL 12

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: TalGloz <glozmantal(at)gmail(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: Compiling C Extension Functions against PostgreSQL 12
Date: 2020-05-02 19:31:20
Message-ID: 4edd59f3-4d95-c41c-6839-7d022946f8d4@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 5/2/20 12:28 PM, TalGloz wrote:
> I'm trying to upgrade from PostgreSQL 10 to 12 and I need to compile all my
> manually created C extension functions against PostrgreSQL 12 before
> starting the upgrade process. I have this Makefile that compiles perfectly
> the seal_diff_cpp.cpp C extension function against PostgreSQL 10:
>
> MODULES = seal_diff_cpp
> PG_CONFIG = /usr/pgsql-10/bin/pg_config
> PGXS = $(shell $(PG_CONFIG) --pgxs)
> INCLUDEDIR = $(shell $(PG_CONFIG) --includedir-server)
> INCLUDE_SEAL = /usr/local/include
> INCLUDE_SEAL_LIB = /usr/local/lib
> INCLUDE_CPPCODEC = /usr/local/include/cppcodec
> CXX = g++
> CXXFLAGS = -std=c++17 -fPIC -Wall -Werror -g -O0 -pthread \
> -I$(INCLUDEDIR) -I$(INCLUDE_SEAL) -I$(INCLUDE_CPPCODEC)
> SEAL_LDFLAGS = -L$(INCLUDE_SEAL_LIB) -lseal -pthread
> include $(PGXS)
> seal_diff_cpp.so: seal_diff_cpp.o
> # $(CXX) -Wl,--no-undefined -shared -o seal_diff_cpp.so
> seal_diff_cpp.o $(LDFLAGS) $(SEAL_LDFLAGS)
> $(CXX) -shared -o seal_diff_cpp.so seal_diff_cpp.o $(LDFLAGS)
> $(SEAL_LDFLAGS)
> seal_diff_cpp.o: seal_diff_cpp.cpp
> $(CXX) $(CXXFLAGS) -o seal_diff_cpp.o -c seal_diff_cpp.cpp
>
> When I execute it the output looks like this:
>
> g++ -std=c++17 -fPIC -Wall -Werror -g -O0 -pthread
> -I/usr/pgsql-10/include/server -I/usr/local/include
> -I/usr/local/include/cppcodec -o seal_diff_cpp.o -c seal_diff_cpp.cpp
> g++ -shared -o seal_diff_cpp.so seal_diff_cpp.o -L/usr/pgsql-10/lib
> -L/usr/lib64 -Wl,--as-needed
> -Wl,-rpath,'/usr/pgsql-10/lib',--enable-new-dtags -L/usr/local/lib -lseal
> -pthread
>
> And the seal_diff_cpp.so gets created without any problems. But when I use
> PG_CONFIG = /usr/pgsql-12/bin/pg_config I get:
>
> g++ -Wall -Wpointer-arith -Wendif-labels -Wmissing-format-attribute
> -Wformat-security -fno-strict-aliasing -fwrapv -O2 -o seal_diff_cpp.o -c
> seal_diff_cpp.cpp
> seal_diff_cpp.cpp:2:10: fatal error: postgres.h: No such file or directory
> 2 | #include <postgres.h>
> | ^~~~~~~~~~~~
> compilation terminated.
> make: *** [Makefile:19: seal_diff_cpp.o] Error 1
>
> The Makefile has all the needed information to compile the seal_diff_cpp.so
> against PostgreSQL 12:
> /usr/pgsql-10/bin/pg_config --pgxs --->
> /usr/pgsql-10/lib/pgxs/src/makefiles/pgxs.mk
> /usr/pgsql-12/bin/pg_config --pgxs --->
> /usr/pgsql-12/lib/pgxs/src/makefiles/pgxs.mk
>
> /usr/pgsql-10/bin/pg_config --includedir-server --->
> /usr/pgsql-10/include/server
> /usr/pgsql-12/bin/pg_config --includedir-server --->
> /usr/pgsql-12/include/server (postgres.h is there)
>
> I can't understand why it doesn't work.

Do you have Postgres 12 -dev package installed?

>
> TalGloz
>
>
>
> --
> Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
>
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message TalGloz 2020-05-02 19:39:14 Re: Compiling C Extension Functions against PostgreSQL 12
Previous Message TalGloz 2020-05-02 19:28:07 Compiling C Extension Functions against PostgreSQL 12