目前,我正在使用PostgreSQL代码。我想在Postgres中添加一个功能作为我项目的一部分。但我想知道“是否可以使用Postgres添加C ++库?”,因此我可以使用该库中的一些函数。谢谢。
答案 0 :(得分:0)
虽然PostgreSQL后端是用C语言编写的,但如果遵循这些指导原则,可以用C ++编写扩展:
后端访问的所有函数都必须为后端提供C接口;这些C函数可以调用C ++函数。例如,后端访问函数需要extern C链接。对于作为后端和C ++代码之间的指针传递的任何函数,这也是必需的。
使用适当的释放方法释放内存。例如,大多数后端内存是使用
palloc()
分配的,因此请使用pfree()
释放它。在这种情况下使用C ++删除将失败。防止异常传播到C代码中(使用所有
extern
C函数顶层的catch-all块)。即使C ++代码没有显式抛出任何异常,这也是必要的,因为像内存不足这样的事件仍然会抛出异常。必须捕获任何异常并将适当的错误传递回C接口。如果可能的话,用-fno-exceptions
编译C ++以完全消除异常;在这种情况下,您必须检查C ++代码中的失败,例如检查new()
返回的NULL。如果从C ++代码调用后端函数,请确保C ++调用堆栈仅包含普通旧数据结构(POD)。这是必要的,因为后端错误会生成一个远程
longjmp()
,它无法正确地展开带有非POD对象的C ++调用堆栈。总之,最好将C ++代码置于与后端接口的
extern
C函数之后,避免异常,内存和调用堆栈泄漏。