Compiling C Extension Functions against PostgreSQL 12
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
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.cppWhen 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
-pthreadAnd 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 1The 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.klaver@aklaver.com
Adrian Klaver-4 wrote
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.cppWhen 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
-pthreadAnd 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 1The 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.klaver@
Yes, I've installed everything PostgreSQL 12 has to offer:
dnf list installed | grep "postgresql12"
postgresql12.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-contrib.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-devel.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-docs.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-libs.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-llvmjit.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-odbc.x86_64 12.01.0000-1PGDG.f31
@pgdg12
postgresql12-plperl.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-plpython.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-plpython3.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-pltcl.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-server.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-tcl.x86_64 2.4.0-2.f31.2
@pgdg12
postgresql12-test.x86_64 12.2-2PGDG.f31
@pgdg12
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
On 5/2/20 12:39 PM, TalGloz wrote:
Adrian Klaver-4 wrote
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:
Yes, I've installed everything PostgreSQL 12 has to offer:
dnf list installed | grep "postgresql12"
postgresql12.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-contrib.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-devel.x86_64 12.2-2PGDG.f31
@pgdg12
Yeah, I missed part in your OP where said postgres.h was there. So:
1) Did you do both makes in the same directory?
2) If so did you do a make clean between builds?
--
Adrian Klaver
adrian.klaver@aklaver.com
Adrian Klaver-4 wrote
On 5/2/20 12:39 PM, TalGloz wrote:
Adrian Klaver-4 wrote
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:Yes, I've installed everything PostgreSQL 12 has to offer:
dnf list installed | grep "postgresql12"
postgresql12.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-contrib.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-devel.x86_64 12.2-2PGDG.f31
@pgdg12Yeah, I missed part in your OP where said postgres.h was there. So:
1) Did you do both makes in the same directory?
2) If so did you do a make clean between builds?
--
Adrian Klaver
adrian.klaver@
1) Yes I did.
2) Yes I did, though no .o .bc or .so files get created because of the error
when using PostgreSQL 12 settings.
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
On 5/2/20 1:03 PM, TalGloz wrote:
Adrian Klaver-4 wrote
On 5/2/20 12:39 PM, TalGloz wrote:
Adrian Klaver-4 wrote
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:Yes, I've installed everything PostgreSQL 12 has to offer:
dnf list installed | grep "postgresql12"
postgresql12.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-contrib.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-devel.x86_64 12.2-2PGDG.f31
@pgdg12Yeah, I missed part in your OP where said postgres.h was there. So:
1) Did you do both makes in the same directory?
2) If so did you do a make clean between builds?
--
Adrian Klaveradrian.klaver@
1) Yes I did.
2) Yes I did, though no .o .bc or .so files get created because of the error
when using PostgreSQL 12 settings.
But they where created when you did the make against Postgres 10, correct?
So where those cleaned up?
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
--
Adrian Klaver
adrian.klaver@aklaver.com
Adrian Klaver-4 wrote
On 5/2/20 1:03 PM, TalGloz wrote:
Adrian Klaver-4 wrote
On 5/2/20 12:39 PM, TalGloz wrote:
Adrian Klaver-4 wrote
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:Yes, I've installed everything PostgreSQL 12 has to offer:
dnf list installed | grep "postgresql12"
postgresql12.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-contrib.x86_64 12.2-2PGDG.f31
@pgdg12
postgresql12-devel.x86_64 12.2-2PGDG.f31
@pgdg12Yeah, I missed part in your OP where said postgres.h was there. So:
1) Did you do both makes in the same directory?
2) If so did you do a make clean between builds?
--
Adrian Klaveradrian.klaver@
1) Yes I did.
2) Yes I did, though no .o .bc or .so files get created because of the
error
when using PostgreSQL 12 settings.But they where created when you did the make against Postgres 10, correct?
So where those cleaned up?--
Sent from:
https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html--
Adrian Klaver
adrian.klaver@
Yes, they were created when using make against Postgres 10 and I clean them
every time when I try a different version of Postgres.
TalGloz
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
On 5/2/20 1:09 PM, TalGloz wrote:
Adrian Klaver-4 wrote
Yes, they were created when using make against Postgres 10 and I clean them
every time when I try a different version of Postgres.
Well I'm reaching the end of what I can do. All I have left is that the
examples I have seen use:
#include "postgres.h"
not
#include <postgres.h>
TalGloz
--
Adrian Klaver
adrian.klaver@aklaver.com
Adrian Klaver-4 wrote
On 5/2/20 1:09 PM, TalGloz wrote:
Adrian Klaver-4 wrote
Yes, they were created when using make against Postgres 10 and I clean
them
every time when I try a different version of Postgres.Well I'm reaching the end of what I can do. All I have left is that the
examples I have seen use:#include "postgres.h"
not
#include
<postgres.h>TalGloz
--
Adrian Klaver
adrian.klaver@
If it works for Postgres 10 it should also work for 12. I've changed from
#include <postgres.h> to #include "postgres.h" and I still get the same
error with Postgres 12 and it complies without any problem with Postgres 10
I dont understand why the output for Postgres 12
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"
| ^~~~~~~~~~~~
looks different form the ones of Postgres 10
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-12/lib
-L/usr/lib64 -Wl,--as-needed
-Wl,-rpath,'/usr/pgsql-12/lib',--enable-new-dtags -L/usr/local/lib -lseal
-pthread
All the includes with "-I" and "-std=c++17 -fPIC" are from the first line
gone. I even tried to use fixed paths in my Makefiles: "PGXS =
/usr/pgsql-12/lib/pgxs/src/makefiles/pgxs.mk" and "INCLUDEDIR =
/usr/pgsql-12/include/server".
TalGloz
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
TalGloz <glozmantal@gmail.com> writes:
I dont understand why the output for Postgres 12
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"
| ^~~~~~~~~~~~
looks different form the ones of Postgres 10
Looking at your Makefile, it seems to be expecting that CXXFLAGS will
be honored in the build, and it isn't being.
As far as I can see from pgxs.mk, you're supposed to spell that
PG_CXXFLAGS. Probably, it accidentally worked to do it the other
way in v10, but no longer does, likely as a result of the fact that
there's now some minimal amount of C++ code in core PG.
I'm a little dubious about whether overriding CXX is a good idea now, too.
(Likely the core setting is the same, but if it were pointing at a
different compiler that could cause trouble.)
regards, tom lane
On 5/2/20 2:18 PM, Tom Lane wrote:
TalGloz <glozmantal@gmail.com> writes:
I dont understand why the output for Postgres 12
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"
| ^~~~~~~~~~~~looks different form the ones of Postgres 10
Looking at your Makefile, it seems to be expecting that CXXFLAGS will
be honored in the build, and it isn't being.As far as I can see from pgxs.mk, you're supposed to spell that
PG_CXXFLAGS. Probably, it accidentally worked to do it the other
way in v10, but no longer does, likely as a result of the fact that
there's now some minimal amount of C++ code in core PG.
I was looking at that and was trying to figure out this from pgxs.mk:
# PG_CXXFLAGS -- will be appended to CXXFLAGS
...
ifdef PG_CXXFLAGS
override CXXFLAGS := $(CXXFLAGS) $(PG_CXXFLAGS)
Was wondering if this might be culprit(from example in pgxs.mk):
# include $(PGXS)
The OP does not have that in their make file.
I'm a little dubious about whether overriding CXX is a good idea now, too.
(Likely the core setting is the same, but if it were pointing at a
different compiler that could cause trouble.)regards, tom lane
--
Adrian Klaver
adrian.klaver@aklaver.com
Adrian Klaver-4 wrote
On 5/2/20 2:18 PM, Tom Lane wrote:
TalGloz <
glozmantal@
> writes:
I dont understand why the output for Postgres 12
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"
| ^~~~~~~~~~~~looks different form the ones of Postgres 10
Looking at your Makefile, it seems to be expecting that CXXFLAGS will
be honored in the build, and it isn't being.As far as I can see from pgxs.mk, you're supposed to spell that
PG_CXXFLAGS. Probably, it accidentally worked to do it the other
way in v10, but no longer does, likely as a result of the fact that
there's now some minimal amount of C++ code in core PG.I was looking at that and was trying to figure out this from pgxs.mk:
# PG_CXXFLAGS -- will be appended to CXXFLAGS
...
ifdef PG_CXXFLAGS
override CXXFLAGS := $(CXXFLAGS) $(PG_CXXFLAGS)Was wondering if this might be culprit(from example in pgxs.mk):
# include $(PGXS)
The OP does not have that in their make file.
I'm a little dubious about whether overriding CXX is a good idea now,
too.
(Likely the core setting is the same, but if it were pointing at a
different compiler that could cause trouble.)regards, tom lane
--
Adrian Klaver
adrian.klaver@
The "include $(PGXS)" is defined in the Makefile. After changig the CXXFLAGS
to PG_CXXFLAGS I get:
*g++ -std=c++17 -fPIC -Wall -Werror -g -O0 -pthread
-I/usr/pgsql-12/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-12/lib
-L/usr/lib64 -L/usr/lib64 -Wl,--as-needed
-Wl,-rpath,'/usr/pgsql-12/lib',--enable-new-dtags -L/usr/local/lib -lseal
-pthread
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/usr/include -flto=thin -emit-llvm -c -o seal_diff_cpp.bc
seal_diff_cpp.cpp*
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using ReaderLock = std::shared_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: use of class template
'std::shared_ptr' requires template arguments
using ReaderLock = std::shared_lock<std::shared_mutex>;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: template is declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:14:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using WriterLock = std::unique_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:14:50: error: use of class template
'std::shared_ptr' requires template arguments
using WriterLock = std::unique_lock<std::shared_mutex>;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: template is declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:21:20: error: unknown type name
'ReaderLock'
inline ReaderLock acquire_read()
^
/usr/local/include/seal/util/locks.h:26:20: error: unknown type name
'WriterLock'
inline WriterLock acquire_write()
^
/usr/local/include/seal/util/locks.h:31:20: error: unknown type name
'ReaderLock'
inline ReaderLock try_acquire_read()
^
/usr/local/include/seal/util/locks.h:36:20: error: unknown type name
'WriterLock'
inline WriterLock try_acquire_write()
^
/usr/local/include/seal/util/locks.h:46:18: error: no type named
'shared_mutex' in namespace 'std'
std::shared_mutex rw_lock_mutex_;
~~~~~^
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
/usr/local/include/seal/util/mempool.h:561:17: error: unknown type name
'ReaderLock'
ReaderLock lock(pools_locker_.acquire_read());
^
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
/usr/local/include/seal/memorypoolhandle.h:144:20: error: no matching
conversion for functional-style cast from
'shared_ptr<seal::util::MemoryPoolMT>' to 'seal::MemoryPoolHandle'
return MemoryPoolHandle(std::make_shared<util::MemoryPoolMT>());
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/seal/memorypoolhandle.h:70:9: note: candidate constructor
not viable: no known conversion from 'shared_ptr<seal::util::MemoryPoolMT>'
to 'const seal::MemoryPoolHandle' for 1st argument
MemoryPoolHandle(const MemoryPoolHandle ©)
^
/usr/local/include/seal/memorypoolhandle.h:81:9: note: candidate constructor
not viable: no known conversion from 'shared_ptr<seal::util::MemoryPoolMT>'
to 'seal::MemoryPoolHandle' for 1st argument
MemoryPoolHandle(MemoryPoolHandle &&source) noexcept
^
/usr/local/include/seal/memorypoolhandle.h:243:9: note: candidate
constructor not viable: no known conversion from
'shared_ptr<seal::util::MemoryPoolMT>' to 'shared_ptr<util::MemoryPool>' for
1st argument
MemoryPoolHandle(std::shared_ptr<util::MemoryPool> pool) noexcept :
^
/usr/local/include/seal/memorypoolhandle.h:61:9: note: candidate constructor
not viable: requires 0 arguments, but 1 was provided
MemoryPoolHandle() = default;
^
11 errors generated.
make: ***
[/usr/pgsql-12/lib/pgxs/src/makefiles/../../src/Makefile.global:1047:
seal_diff_cpp.bc] Error 1
Does it try to comply the seal related code using the llvm compiler? If yes,
can I force it to se the GNU compiler instead? In my knolage the seal
library doesn't work with llvm.
Best regards,
TalGloz
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
On 5/2/20 2:44 PM, TalGloz wrote:
Adrian Klaver-4 wrote
On 5/2/20 2:18 PM, Tom Lane wrote:
TalGloz <
adrian.klaver@
The "include $(PGXS)" is defined in the Makefile. After changig the CXXFLAGS
Hmm, time to clean my glasses.
Have no idea what the below means.
to PG_CXXFLAGS I get:
*g++ -std=c++17 -fPIC -Wall -Werror -g -O0 -pthread
-I/usr/pgsql-12/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-12/lib
-L/usr/lib64 -L/usr/lib64 -Wl,--as-needed
-Wl,-rpath,'/usr/pgsql-12/lib',--enable-new-dtags -L/usr/local/lib -lseal
-pthread
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/usr/include -flto=thin -emit-llvm -c -o seal_diff_cpp.bc
seal_diff_cpp.cpp*
In file included from seal_diff_cpp.cpp:23:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using ReaderLock = std::shared_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
--
Adrian Klaver
adrian.klaver@aklaver.com
Tom Lane-2 wrote
TalGloz <
glozmantal@
> writes:
I dont understand why the output for Postgres 12
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"
| ^~~~~~~~~~~~looks different form the ones of Postgres 10
Looking at your Makefile, it seems to be expecting that CXXFLAGS will
be honored in the build, and it isn't being.As far as I can see from pgxs.mk, you're supposed to spell that
PG_CXXFLAGS. Probably, it accidentally worked to do it the other
way in v10, but no longer does, likely as a result of the fact that
there's now some minimal amount of C++ code in core PG.I'm a little dubious about whether overriding CXX is a good idea now, too.
(Likely the core setting is the same, but if it were pointing at a
different compiler that could cause trouble.)regards, tom lane
I've added some output to a different module Makefile that uses the same
libraries and Changed "CXXFLAGS" to "PG_CXXFLAGS" and "LDFLAGS" to
"PG_LDFLAGS":
# This file crates the seal_mean_cxx_v2.so library for the PostgreSQL
# Usage:
# make # compiles all
# make clean # clean all binaries and objects
MODULES = seal_mean_cxx_v2
# Location of PostgreSQL pg_config file
PG_CONFIG = /usr/pgsql-10/bin/pg_config
# PostgreSQL path to PGXS
PGXS = $(shell $(PG_CONFIG) --pgxs)
# PostgreSQL path to server header files
INCLUDEDIR = $(shell $(PG_CONFIG) --includedir-server)
# PostgreSQL path to executable shared libraries
POSGRESLIBINSTALL = $(shell $(PG_CONFIG) --pkglibdir)
# Location of the installed seal library
INCLUDE_SEAL = /usr/local/include
# Location of the compiled seal lib library
INCLUDE_SEAL_LIB = /usr/local/lib
# Location of the installed cppcodec library
INCLUDE_CPPCODEC = /usr/local/include/cppcodec
# Compiler to use
CXX = g++
# Compiler flags
PG_CXXFLAGS = -std=c++17 -fPIC -Wall -Werror -g -O0 -pthread \
-I$(INCLUDEDIR) -I$(INCLUDE_SEAL) -I$(INCLUDE_CPPCODEC)
#PG_LDFLAGS= -L$(INCLUDE_SEAL_LIB) -lseal -pthread
# Seal linker flags
SEAL_LDFLAGS = -L$(INCLUDE_SEAL_LIB) -lseal -pthread
include $(PGXS)
seal_mean_cxx_v2.so: seal_mean_cxx_v2.o # Create the .so file
@echo ""
@echo "Cereating .so file."
# Needed when checking the linker errors against the external SEAL library
and must be commented when creating .so file
# $(CXX) -Wl,--no-undefined -shared -o seal_mean_cxx.so seal_mean_cxx.o
$(PG_LDFLAGS) $(SEAL_LDFLAGS)
# Creates the .so file
$(CXX) -shared -o seal_mean_cxx_v2.so seal_mean_cxx_v2.o $(PG_LDFLAGS)
$(SEAL_LDFLAGS)
@echo "Done."
@echo ""
@echo "Copying the created .so library to \"${POSGRESLIBINSTALL}\"."
# Copies the .so file to PostgreSQL shared libraries
cp seal_mean_cxx_v2.so $(POSGRESLIBINSTALL)
@echo "Done."
@echo ""
seal_mean_cxx_v2.o: seal_mean_cxx_v2.cpp # Create the .o file
@echo ""
@echo "Creating .o file."
$(CXX) $(PG_CXXFLAGS) -o seal_mean_cxx_v2.o -c seal_mean_cxx_v2.cpp
@echo "Done."
.PHONY = clean
clean: # Clean .so and .o files
@echo ""
@echo "Cleaning the .so and .o files"
rm -f seal_mean_cxx_v2.so rm seal_mean_cxx_v2.o
@echo "Done."
@echo ""
I get this part for my code in the Makefile:
Makefile:57: warning: overriding recipe for target 'clean'
/usr/pgsql-12/lib/pgxs/src/makefiles/pgxs.mk:342: warning: ignoring old
recipe for target 'clean'
Cleaning the .so and .o files
rm -f seal_mean_cxx_v2.so rm seal_mean_cxx_v2.o
Done.
[root@www seal_mean]# make
Makefile:57: warning: overriding recipe for target 'clean'
/usr/pgsql-12/lib/pgxs/src/makefiles/pgxs.mk:342: warning: ignoring old
recipe for target 'clean'
Creating .o file.
g++ -Wall -Wpointer-arith -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv -O2 -std=c++17 -fPIC -Wall
-Werror -g -O0 -pthread -I/usr/pgsql-12/include/server -I/usr/local/include
-I/usr/local/include/cppcodec -o seal_mean_cxx_v2.o -c seal_mean_cxx_v2.cpp
Done.
Cereating .so file.
g++ -shared -o seal_mean_cxx_v2.so seal_mean_cxx_v2.o -L/usr/pgsql-12/lib
-L/usr/lib64 -L/usr/lib64 -Wl,--as-needed
-Wl,-rpath,'/usr/pgsql-12/lib',--enable-new-dtags -L/usr/local/lib -lseal
-pthread
Done.
Copying the created .so library to "/usr/pgsql-12/lib".
cp seal_mean_cxx_v2.so /usr/pgsql-12/lib
Done.
Which is good, my seal_mean_cxx_v2.so being created and copied to
/usr/pgsql-12/lib/. But right after that I get this and it doesn't seem to
effect my seal_mean_cxx_v2.so library:
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/usr/include -flto=thin -emit-llvm -c -o seal_mean_cxx_v2.bc
seal_mean_cxx_v2.cpp
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using ReaderLock = std::shared_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: use of class template
'std::shared_ptr' requires template arguments
using ReaderLock = std::shared_lock<std::shared_mutex>;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: template is declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:14:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using WriterLock = std::unique_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:14:50: error: use of class template
'std::shared_ptr' requires template arguments
using WriterLock = std::unique_lock<std::shared_mutex>;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: template is declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:21:20: error: unknown type name
'ReaderLock'
inline ReaderLock acquire_read()
^
/usr/local/include/seal/util/locks.h:26:20: error: unknown type name
'WriterLock'
inline WriterLock acquire_write()
^
/usr/local/include/seal/util/locks.h:31:20: error: unknown type name
'ReaderLock'
inline ReaderLock try_acquire_read()
^
/usr/local/include/seal/util/locks.h:36:20: error: unknown type name
'WriterLock'
inline WriterLock try_acquire_write()
^
/usr/local/include/seal/util/locks.h:46:18: error: no type named
'shared_mutex' in namespace 'std'
std::shared_mutex rw_lock_mutex_;
~~~~~^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
/usr/local/include/seal/util/mempool.h:561:17: error: unknown type name
'ReaderLock'
ReaderLock lock(pools_locker_.acquire_read());
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
/usr/local/include/seal/memorypoolhandle.h:144:20: error: no matching
conversion for functional-style cast from
'shared_ptr<seal::util::MemoryPoolMT>' to 'seal::MemoryPoolHandle'
return MemoryPoolHandle(std::make_shared<util::MemoryPoolMT>());
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/seal/memorypoolhandle.h:70:9: note: candidate constructor
not viable: no known conversion from 'shared_ptr<seal::util::MemoryPoolMT>'
to 'const seal::MemoryPoolHandle' for 1st argument
MemoryPoolHandle(const MemoryPoolHandle ©)
^
/usr/local/include/seal/memorypoolhandle.h:81:9: note: candidate constructor
not viable: no known conversion from 'shared_ptr<seal::util::MemoryPoolMT>'
to 'seal::MemoryPoolHandle' for 1st argument
MemoryPoolHandle(MemoryPoolHandle &&source) noexcept
^
/usr/local/include/seal/memorypoolhandle.h:243:9: note: candidate
constructor not viable: no known conversion from
'shared_ptr<seal::util::MemoryPoolMT>' to 'shared_ptr<util::MemoryPool>' for
1st argument
MemoryPoolHandle(std::shared_ptr<util::MemoryPool> pool) noexcept :
^
/usr/local/include/seal/memorypoolhandle.h:61:9: note: candidate constructor
not viable: requires 0 arguments, but 1 was provided
MemoryPoolHandle() = default;
^
11 errors generated.
make: ***
[/usr/pgsql-12/lib/pgxs/src/makefiles/../../src/Makefile.global:1047:
seal_mean_cxx_v2.bc] Error 1
Why does it start executing the following after it did what it was supposed
to do?
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/usr/include -flto=thin -emit-llvm -c -o seal_mean_cxx_v2.bc
seal_mean_cxx_v2.cpp
Best regards,
TalGloz
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
On 5/2/20 4:03 PM, TalGloz wrote:
Tom Lane-2 wrote
TalGloz <
glozmantal@
> writes:
I dont understand why the output for Postgres 12
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"
| ^~~~~~~~~~~~looks different form the ones of Postgres 10
Looking at your Makefile, it seems to be expecting that CXXFLAGS will
be honored in the build, and it isn't being.As far as I can see from pgxs.mk, you're supposed to spell that
PG_CXXFLAGS. Probably, it accidentally worked to do it the other
way in v10, but no longer does, likely as a result of the fact that
there's now some minimal amount of C++ code in core PG.I'm a little dubious about whether overriding CXX is a good idea now, too.
(Likely the core setting is the same, but if it were pointing at a
different compiler that could cause trouble.)regards, tom lane
I've added some output to a different module Makefile that uses the same
libraries and Changed "CXXFLAGS" to "PG_CXXFLAGS" and "LDFLAGS" to
"PG_LDFLAGS":
Did you?
In Makefile below I see:
#PG_LDFLAGS= -L$(INCLUDE_SEAL_LIB) -lseal -pthread
# Seal linker flags
SEAL_LDFLAGS = -L$(INCLUDE_SEAL_LIB) -lseal -pthread
# This file crates the seal_mean_cxx_v2.so library for the PostgreSQL
# Usage:
# make # compiles all
# make clean # clean all binaries and objectsMODULES = seal_mean_cxx_v2
# Location of PostgreSQL pg_config file
PG_CONFIG = /usr/pgsql-10/bin/pg_config
# PostgreSQL path to PGXS
PGXS = $(shell $(PG_CONFIG) --pgxs)
# PostgreSQL path to server header files
INCLUDEDIR = $(shell $(PG_CONFIG) --includedir-server)
# PostgreSQL path to executable shared libraries
POSGRESLIBINSTALL = $(shell $(PG_CONFIG) --pkglibdir)# Location of the installed seal library
INCLUDE_SEAL = /usr/local/include
# Location of the compiled seal lib library
INCLUDE_SEAL_LIB = /usr/local/lib
# Location of the installed cppcodec library
INCLUDE_CPPCODEC = /usr/local/include/cppcodec# Compiler to use
CXX = g++
# Compiler flags
PG_CXXFLAGS = -std=c++17 -fPIC -Wall -Werror -g -O0 -pthread \
-I$(INCLUDEDIR) -I$(INCLUDE_SEAL) -I$(INCLUDE_CPPCODEC)
#PG_LDFLAGS= -L$(INCLUDE_SEAL_LIB) -lseal -pthread
# Seal linker flags
SEAL_LDFLAGS = -L$(INCLUDE_SEAL_LIB) -lseal -pthread
include $(PGXS)seal_mean_cxx_v2.so: seal_mean_cxx_v2.o # Create the .so file
@echo ""
@echo "Cereating .so file."
# Needed when checking the linker errors against the external SEAL library
and must be commented when creating .so file
# $(CXX) -Wl,--no-undefined -shared -o seal_mean_cxx.so seal_mean_cxx.o
$(PG_LDFLAGS) $(SEAL_LDFLAGS)
# Creates the .so file
$(CXX) -shared -o seal_mean_cxx_v2.so seal_mean_cxx_v2.o $(PG_LDFLAGS)
$(SEAL_LDFLAGS)
@echo "Done."
@echo ""
@echo "Copying the created .so library to \"${POSGRESLIBINSTALL}\"."
# Copies the .so file to PostgreSQL shared libraries
cp seal_mean_cxx_v2.so $(POSGRESLIBINSTALL)
@echo "Done."
@echo ""seal_mean_cxx_v2.o: seal_mean_cxx_v2.cpp # Create the .o file
@echo ""
@echo "Creating .o file."
$(CXX) $(PG_CXXFLAGS) -o seal_mean_cxx_v2.o -c seal_mean_cxx_v2.cpp
@echo "Done.".PHONY = clean
clean: # Clean .so and .o files
@echo ""
@echo "Cleaning the .so and .o files"
rm -f seal_mean_cxx_v2.so rm seal_mean_cxx_v2.o
@echo "Done."
@echo ""I get this part for my code in the Makefile:
Makefile:57: warning: overriding recipe for target 'clean'
/usr/pgsql-12/lib/pgxs/src/makefiles/pgxs.mk:342: warning: ignoring old
recipe for target 'clean'Cleaning the .so and .o files
rm -f seal_mean_cxx_v2.so rm seal_mean_cxx_v2.o
Done.[root@www seal_mean]# make
Makefile:57: warning: overriding recipe for target 'clean'
/usr/pgsql-12/lib/pgxs/src/makefiles/pgxs.mk:342: warning: ignoring old
recipe for target 'clean'Creating .o file.
g++ -Wall -Wpointer-arith -Wendif-labels -Wmissing-format-attribute
-Wformat-security -fno-strict-aliasing -fwrapv -O2 -std=c++17 -fPIC -Wall
-Werror -g -O0 -pthread -I/usr/pgsql-12/include/server -I/usr/local/include
-I/usr/local/include/cppcodec -o seal_mean_cxx_v2.o -c seal_mean_cxx_v2.cpp
Done.Cereating .so file.
g++ -shared -o seal_mean_cxx_v2.so seal_mean_cxx_v2.o -L/usr/pgsql-12/lib
-L/usr/lib64 -L/usr/lib64 -Wl,--as-needed
-Wl,-rpath,'/usr/pgsql-12/lib',--enable-new-dtags -L/usr/local/lib -lseal
-pthread
Done.Copying the created .so library to "/usr/pgsql-12/lib".
cp seal_mean_cxx_v2.so /usr/pgsql-12/lib
Done.Which is good, my seal_mean_cxx_v2.so being created and copied to
/usr/pgsql-12/lib/. But right after that I get this and it doesn't seem to
effect my seal_mean_cxx_v2.so library:
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/usr/include -flto=thin -emit-llvm -c -o seal_mean_cxx_v2.bc
seal_mean_cxx_v2.cpp
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using ReaderLock = std::shared_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:12:50: error: use of class template
'std::shared_ptr' requires template arguments
using ReaderLock = std::shared_lock<std::shared_mutex>;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: template is declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:14:50: error: no template named
'shared_mutex' in namespace 'std'; did you mean 'shared_ptr'?
using WriterLock = std::unique_lock<std::shared_mutex>;
~~~~~^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: 'shared_ptr' declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:14:50: error: use of class template
'std::shared_ptr' requires template arguments
using WriterLock = std::unique_lock<std::shared_mutex>;
^
/usr/bin/../lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/shared_ptr.h:103:11:
note: template is declared here
class shared_ptr : public __shared_ptr<_Tp>
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
In file included from /usr/local/include/seal/util/mempool.h:12:
/usr/local/include/seal/util/locks.h:21:20: error: unknown type name
'ReaderLock'
inline ReaderLock acquire_read()
^
/usr/local/include/seal/util/locks.h:26:20: error: unknown type name
'WriterLock'
inline WriterLock acquire_write()
^
/usr/local/include/seal/util/locks.h:31:20: error: unknown type name
'ReaderLock'
inline ReaderLock try_acquire_read()
^
/usr/local/include/seal/util/locks.h:36:20: error: unknown type name
'WriterLock'
inline WriterLock try_acquire_write()
^
/usr/local/include/seal/util/locks.h:46:18: error: no type named
'shared_mutex' in namespace 'std'
std::shared_mutex rw_lock_mutex_;
~~~~~^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
In file included from /usr/local/include/seal/memorypoolhandle.h:6:
/usr/local/include/seal/util/mempool.h:561:17: error: unknown type name
'ReaderLock'
ReaderLock lock(pools_locker_.acquire_read());
^
In file included from seal_mean_cxx_v2.cpp:25:
In file included from /usr/local/include/seal/seal.h:3:
In file included from /usr/local/include/seal/bigpoly.h:9:
In file included from /usr/local/include/seal/biguint.h:6:
/usr/local/include/seal/memorypoolhandle.h:144:20: error: no matching
conversion for functional-style cast from
'shared_ptr<seal::util::MemoryPoolMT>' to 'seal::MemoryPoolHandle'
return MemoryPoolHandle(std::make_shared<util::MemoryPoolMT>());
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/seal/memorypoolhandle.h:70:9: note: candidate constructor
not viable: no known conversion from 'shared_ptr<seal::util::MemoryPoolMT>'
to 'const seal::MemoryPoolHandle' for 1st argument
MemoryPoolHandle(const MemoryPoolHandle ©)
^
/usr/local/include/seal/memorypoolhandle.h:81:9: note: candidate constructor
not viable: no known conversion from 'shared_ptr<seal::util::MemoryPoolMT>'
to 'seal::MemoryPoolHandle' for 1st argument
MemoryPoolHandle(MemoryPoolHandle &&source) noexcept
^
/usr/local/include/seal/memorypoolhandle.h:243:9: note: candidate
constructor not viable: no known conversion from
'shared_ptr<seal::util::MemoryPoolMT>' to 'shared_ptr<util::MemoryPool>' for
1st argument
MemoryPoolHandle(std::shared_ptr<util::MemoryPool> pool) noexcept :
^
/usr/local/include/seal/memorypoolhandle.h:61:9: note: candidate constructor
not viable: requires 0 arguments, but 1 was provided
MemoryPoolHandle() = default;
^
11 errors generated.
make: ***
[/usr/pgsql-12/lib/pgxs/src/makefiles/../../src/Makefile.global:1047:
seal_mean_cxx_v2.bc] Error 1Why does it start executing the following after it did what it was supposed
to do?
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/usr/include -flto=thin -emit-llvm -c -o seal_mean_cxx_v2.bc
seal_mean_cxx_v2.cppBest regards,
TalGloz--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
--
Adrian Klaver
adrian.klaver@aklaver.com
Adrian Klaver-4 wrote
On 5/2/20 4:03 PM, TalGloz wrote:
Did you?
In Makefile below I see:
#PG_LDFLAGS= -L$(INCLUDE_SEAL_LIB) -lseal -pthread
# Seal linker flags
SEAL_LDFLAGS = -L$(INCLUDE_SEAL_LIB) -lseal -pthread--
Adrian Klaver
adrian.klaver@
It actually didn't change a thing but since they are the same I've removed
the "SEAL_LDFLAGS" and used "PG_LDFLAGS" instead.
The maigor breakthrough was changing "CXXFLAGS" to "PG_CXXFLAGS" this has
removed the error:
seal_diff_cpp.cpp:2:10: fatal error: postgres.h: No such file or directory
2 | #include <postgres.h>
| ^~~~~~~~~~~~
All the Makefile steps and their outputs get generated as should. My only
concern is regarding the last part below that comes after
"seal_mean_cxx_v2.so" was generated and copied to "/usr/pgsql-12/lib" and
generates all the errors regarding the seal library I've listed in previous
posts. I don't know what triggers it in my Makefile and it not supposed to
be executed.
/usr/lib64/ccache/clang -xc++ -Wno-ignored-attributes -fno-strict-aliasing
-fwrapv -O2 -I. -I./ -I/usr/pgsql-12/include/server
-I/usr/pgsql-12/include/internal -D_GNU_SOURCE -I/usr/include/libxml2
-I/us /include -flto=thin -emit-llvm -c -o seal_mean_cxx_v2.bc
seal_mean_cxx_v2.cpp
Maybe it is being triggered by the "pgxs.mk" because as of Postgres 12 it
has "with_llvm" parts e.g.:
ifeq ($(with_llvm), yes)
all: $(addsuffix .bc, $(MODULES)) $(patsubst %.o,%.bc, $(OBJS))
endif
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
"TalGloz" == TalGloz <glozmantal@gmail.com> writes:
TalGloz> Which is good, my seal_mean_cxx_v2.so being created and copied
TalGloz> to /usr/pgsql-12/lib/. But right after that I get this and it
TalGloz> doesn't seem to effect my seal_mean_cxx_v2.so library:
What's happening here is that it's attempting to build LLVM bitcode
files for your library for the benefit of the JIT compiler that exists
in recent postgres versions - without these files, your extension
functions cannot be inlined into generated code.
This requires that your code be compilable using clang (as well as gcc
if that's what was used to build PG itself), and there's clearly some
disagreement going on between clang and your system header files that's
causing the failure.
I didn't see an easy way of disabling bitcode emission for a module,
though I think that has been discussed before.
--
Andrew (irc:RhodiumToad)
Andrew Gierth wrote
"TalGloz" == TalGloz <
glozmantal@
> writes:
TalGloz> Which is good, my seal_mean_cxx_v2.so being created and copied
TalGloz> to /usr/pgsql-12/lib/. But right after that I get this and it
TalGloz> doesn't seem to effect my seal_mean_cxx_v2.so library:What's happening here is that it's attempting to build LLVM bitcode
files for your library for the benefit of the JIT compiler that exists
in recent postgres versions - without these files, your extension
functions cannot be inlined into generated code.This requires that your code be compilable using clang (as well as gcc
if that's what was used to build PG itself), and there's clearly some
disagreement going on between clang and your system header files that's
causing the failure.I didn't see an easy way of disabling bitcode emission for a module,
though I think that has been discussed before.--
Andrew (irc:RhodiumToad)
Will the absence of LLVM bit-code files effect the functionality of my
"seal_mean_cxx_v2.so" library in Postgresql12 or I just won't benefit from
Postgres JIT compiler (postgresql12-llvmjit package)? The
"seal_mean_cxx_v2.so" was enough to use with Postgres 10.
All the errors occurring for the llvm compilation part relate to the
Microsoft SEAL <https://github.com/microsoft/SEAL> library that my
seal_mean_cxx_v2.cpp uses. Since it is a third party library then maybe I
should post the errors output there and see what they have to say about
it...
Best regerds,
TalGloz
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
TalGloz <glozmantal@gmail.com> writes:
Andrew Gierth wrote
I didn't see an easy way of disabling bitcode emission for a module,
though I think that has been discussed before.
After taking a quick look through pgxs.mk, it looks like you might
be able to do something like
override with_llvm := no
in your Makefile before including the PG parts.
Will the absence of LLVM bit-code files effect the functionality of my
"seal_mean_cxx_v2.so" library in Postgresql12 or I just won't benefit from
Postgres JIT compiler (postgresql12-llvmjit package)?
Should just prevent the possibility of "inline"-ing your functions
in JIT compilation.
All the errors occurring for the llvm compilation part relate to the
Microsoft SEAL <https://github.com/microsoft/SEAL> library that my
seal_mean_cxx_v2.cpp uses. Since it is a third party library then maybe I
should post the errors output there and see what they have to say about
it...
Yeah, the ultimate solution is clearly over on that side. These
last errors you've posted don't seem particularly Postgres-related.
regards, tom lane
Tom Lane-2 wrote
TalGloz <
glozmantal@
> writes:
Andrew Gierth wrote
I didn't see an easy way of disabling bitcode emission for a module,
though I think that has been discussed before.After taking a quick look through pgxs.mk, it looks like you might
be able to do something like
override with_llvm := no
in your Makefile before including the PG parts.Will the absence of LLVM bit-code files effect the functionality of my
"seal_mean_cxx_v2.so" library in Postgresql12 or I just won't benefit
from
Postgres JIT compiler (postgresql12-llvmjit package)?Should just prevent the possibility of "inline"-ing your functions
in JIT compilation.All the errors occurring for the llvm compilation part relate to the
Microsoft SEAL <https://github.com/microsoft/SEAL&gt; library that
my
seal_mean_cxx_v2.cpp uses. Since it is a third party library then maybe I
should post the errors output there and see what they have to say about
it...Yeah, the ultimate solution is clearly over on that side. These
last errors you've posted don't seem particularly Postgres-related.regards, tom lane
Setting "override with_llvm := no" did make the compilation step with llvm
go away. I'm using an older version of SEAL and I wanted to maintain my code
functionality after upgrading to Postgres 12. I'll be posting the llvm
related errors on the SEAL project page for more clarification, maybe the
usage of the old SEAL version is the problem. Anyways, after retaining the
original functionality with Postgres 12 I'll be focusing on updating my code
to comply with the latest SEAL version.
Thanks to all of you for helping me with this "issue".
Best regards,
TalGloz
--
Sent from: https://www.postgresql-archive.org/PostgreSQL-general-f1843780.html