gpt4 book ai didi

c++ - 在 Windows 环境中的 PostgreSQL 9.1 中创建函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:29 25 4
gpt4 key购买 nike

我在 visual studio 2010 中创建了一个 dll 文件,我想在 PostgreSQL 9.1 中使用这个 dll > 创建一个函数,但出现此错误:

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

应该包含在动态加载中,但它没有说明任何关于C++兼容性的内容。任何知道如何处理这个问题的人?我如何才能消除该错误以在 Windows 环境中的 PostgreSQL 中使用 C++ 创建函数?

最佳答案

你编译的是 C 还是 C++?如果您使用 C++,您需要将 PG_MODULE_MAGIC 包装在 extern "C" block 中,根据 writing extensions in C++ .

如果可能的话,只写普通的 c 并编译为普通的 c,不要使用 C++。将 C++ 代码混合到 PostgreSQL 中既复杂又困难,因此对于初学者来说不是一件好事。

如果你绝对必须使用 C++,最明智的方法是用 C++ 编写代码,向它公开 extern "C" 接口(interface),其中 C++ 对象作为不透明 void< 传入和传出 指针或指向空结构类型的指针。然后使用您公开的纯 c 接口(interface)来编写您的 Pg 模块。有像 SWIG 这样的工具这有助于产生这样的包装器,但对于像 Pg 模块这样的东西,它通常不是必需的。

您可以谨慎地在 Pg 模块中直接使用 C++,但是如果您调用 Pg -> C++,Pg 基于 longjmp 的错误处理完全破坏您的堆栈-> Pg 并得到一个错误。说真的,不要这样做。保持 C++ 隔离。

关于c++ - 在 Windows 环境中的 PostgreSQL 9.1 中创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com