Re: Compiling C Extension Functions against PostgreSQL 12 - Mailing list pgsql-general
From | Adrian Klaver |
---|---|
Subject | Re: Compiling C Extension Functions against PostgreSQL 12 |
Date | |
Msg-id | 59882a95-e528-0845-e6e3-ad00356c1065@aklaver.com Whole thread Raw |
In response to | Re: Compiling C Extension Functions against PostgreSQL 12 (TalGloz <glozmantal@gmail.com>) |
Responses |
Re: Compiling C Extension Functions against PostgreSQL 12
|
List | pgsql-general |
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 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 > > -- Adrian Klaver adrian.klaver@aklaver.com
pgsql-general by date: