C - Функция на С для PostgreSQL - Stack Overflow на русском

Опубликовано: 01.09.2018

видео c - Функция на С для PostgreSQL - Stack Overflow на русском

Try DJANGO TUTORIAL Series (v1.11) // Learn Django Version 1.11

Я написал функцию на С для PostgreSQL и начинаю собирать под систему с разной разрядностью (х86, х64). ОС - Windows 10. Вот краткий код


[ThemBay] Solved - Warning: sprintf(): Too few arguments in class-bulk-upgrader-skin.php on line 154

#include"postgres.h" #include "fmgr.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PG_FUNCTION_INFO_V1(add_one); PGDLLEXPORT Datum add_one(PG_FUNCTION_ARGS) {...}

Когда я собираю для x86 у меня все проходит успешно. Когда я собираю для x64 появляется ошибка add_one redefinition; different linkage.

Для ликвидации этой ошибки я делаю так (данный код компилируется успешно и для х86)

#include"postgres.h" #include "fmgr.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PGDLLEXPORT Datum add_one(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(add_one); Datum add_one(PG_FUNCTION_ARGS) {...}

Если я поменяю порядок строк:

PGDLLEXPORT Datum add_one(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(add_one);

На такой:

PG_FUNCTION_INFO_V1(add_one); PGDLLEXPORT Datum add_one(PG_FUNCTION_ARGS);

То появляется та же ошибка.

Первый вопрос: почему для х86 платформы компилируется хорошо, а для х64 необходимо внести такие изменения.

Второй вопрос: если данный код я попробую собрать под Linux, мне нужно ли будет вносить изменения в сам код, так как PGDLLEXPORT это макроопределение для экспорта в винде.

Пишу в MSVC2017.

rss