Compiling C Extension Functions against PostgreSQL 12 - Mailing list pgsql-general

From TalGloz
Subject Compiling C Extension Functions against PostgreSQL 12
Date
Msg-id 1588447687198-0.post@n3.nabble.com
Whole thread Raw
Responses Re: Compiling C Extension Functions against PostgreSQL 12  (Adrian Klaver <adrian.klaver@aklaver.com>)
List pgsql-general
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.

TalGloz



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



pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: How to move a 11.4 cluster to another Linux host, but empty?
Next
From: Adrian Klaver
Date:
Subject: Re: Compiling C Extension Functions against PostgreSQL 12