Я создал dll
файл в visual studio 2010
и я пытаюсь использовать это dll
в PostgreSQL 9.1
чтобы создать функцию, но я получаю эту ошибку:
ERROR: incompatible library "D:\visual_studio\DynamicLibrary\x64\Debug\funxx.dll":
missing magic block
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
я использую 64bits windows.i
проверил документацию PostgreSQL
около C
Языковые функции и динамическая загрузка, и это говорит
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
должны быть включены для dynamic loading
но это ничего не говорит о C++
совместимость.
Кто-нибудь, кто знает, как решить эту проблему? Как я могу удалить эту ошибку, чтобы создать функции с использованием C ++ в PostgreSQL
в среде Windows?
Вы собрали как C
или как C++
? Если вы использовали C++
вам нужно будет обернуть PG_MODULE_MAGIC
в extern "C"
блок, согласно написание расширений в C ++.
Если это вообще возможно, просто напишите ясно c
и скомпилировать как простой c
держите C ++ вне изображения. Смешение кода C ++ в PostgreSQL является сложным и трудным делом, поэтому для новичка это нехорошо.
Если вам абсолютно необходимо использовать C ++, то самый разумный способ — написать код на C ++, extern "C"
интерфейсы к нему, где объекты C ++ передаются и выходят как непрозрачные void
указатели или указатели на пустые типы структур. Тогда используйте чистый c
интерфейс, который вы выставили, чтобы написать свой модуль Pg. Есть такие инструменты, как SWIG это помогает создавать такие обертки, но обычно это не нужно для чего-то вроде модуля Pg.
Вы можете использовать C ++ непосредственно в модулях Pg с осторожностью, но Pg’s longjmp
основанная обработка ошибок будут полностью испортите свой стек, если вы когда-нибудь позвоните Pg -> C++ -> Pg
и получите ошибку. Серьезно, не делай этого. Держите ваш C ++ изолированным.
Других решений пока нет …