Re: PostgreSQL C Language Extension with C++ Code

Поиск
Список
Период
Сортировка
От Igor Korot
Тема Re: PostgreSQL C Language Extension with C++ Code
Дата
Msg-id CA+FnnTzH1gZ8o4a_WTD79kk7CNUzFu0NHUmbs03Gax0Su4Lgzw@mail.gmail.com
обсуждение исходный текст
Ответ на PostgreSQL C Language Extension with C++ Code  (TalGloz <glozmantal@gmail.com>)
Ответы Re: PostgreSQL C Language Extension with C++ Code  (TalGloz <glozmantal@gmail.com>)
Список pgsql-general
Hi,

On Sun, Aug 12, 2018 at 12:05 PM, TalGloz <glozmantal@gmail.com> wrote:
> Hi,
>
> I've searched information about my problem in the archives and on the
> internet, but it didn't help. I have this small myfunc.cpp
>
> 1:   #include <postgres.h>
> 2:   #include <utils/rel.h>
> 3:   #include <postgres.h>
> 4:   #include <fmgr.h>
> 5:   #include <utils/array.h>
> 6:   #include <utils/builtins.h>
> 7:   #include <catalog/pg_type.h>
> 8:   #include <string>
> 9:   #include <vector>
> 10: #include <stdlib.h>
> 11: #include <stdint.h>
> 12: #include <iostream>
> 13: #include <fstream>
> 14: #include <seal/seal.h> // external compiled c++ library linked on
> running 'make'
> 15:
> 16: #ifdef PG_MODULE_MAGIC

I think you're missing  "n" here.
Should be:

#ifndef PG_MODULE_MAGIC

.

Thank you.

> 17: PG_MODULE_MAGIC;
> 18: #endif
> 19:
> 20: Datum sum_of_numbers(PG_FUNCTION_ARGS);
> 21: PG_FUNCTION_INFO_V1(sum_of_numbers);
> 22:
> 23: extern "C" {
> 24:         int64_t sum_of_numbers(){
> 25:                 std::vector<int64_t> numbers {23, 445, 64};
> 26:                 auto sum = 0;
> 27:                 for (auto &item : numbers){
> 28:                         sum += item;
> 29:                 }
> 30:                 return sum;
> 31:         }
> 32: }
>
> And I compile without any problem suing this Makefiles:
>
> 1:   MODULES = myfunc
> 2:
> 3:   PG_CONFIG = /usr/pgsql-10/bin/pg_config
> 4:   PGXS = $(shell $(PG_CONFIG) --pgxs)
> 5:   INCLUDEDIR = $(shell $(PG_CONFIG) --includedir-server)
> 6:   INCLUDE_SEAL = /usr/local/include/seal
> 7:   INCLUDE_SEAL_LIB = /usr/local/lib/libseal.a
> 8:   INCLUDE_CPPCODEC = /usr/local/include/cppcodec
> 9:   #CFLAGS = -std=c11
> 10: #CFLAGS = --std=c++14 -fPIC -Wall -Werror -g3 -O0
> 11: include $(PGXS)
> 12: myfunc.so: myfunc.o
> 13:         g++ -shared -o myfunc.so myfunc.o
> 14:
> 16: myfunc.o: myfunc.cpp
> 17:        g++ --std=c++17 -fPIC -Wall -Werror -g3 -O0 -o myfunc.o -c
> myfunc.cpp -I$(INCLUDEDIR) -L$(INCLUDE_SEAL_LIB) -I$(INCLUDE_SEAL)
> -I$(INCLUDE_CPPCODEC)
> 18:
>
> After copying the myfunc.so file to the PostgreSQL lib folder and executing:
>
> 1: CREATE OR REPLACE FUNCTION
> 2:    sum_of_numbers() RETURNS integer AS 'myfunc'
> 3: LANGUAGE C STRICT;
>
> I get this error:
> *ERROR:  incompatible library "/usr/pgsql-10/lib/myfunc.so": missing magic
> block
> HINT:  Extension libraries are required to use the PG_MODULE_MAGIC macro.
> SQL state: XX000*
>
> I've added the files and line numbers for an easier discussion.
>
> Thanks a lot,
> Tal
>
> myfunc.cpp <http://www.postgresql-archive.org/file/t351748/myfunc.cpp>
> Makefiles.Makefiles
> <http://www.postgresql-archive.org/file/t351748/Makefiles.Makefiles>
>
>
>
> --
> Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
>


В списке pgsql-general по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: PostgreSQL C Language Extension with C++ Code
Следующее
От: TalGloz
Дата:
Сообщение: Re: PostgreSQL C Language Extension with C++ Code