云数据库 GAUSSDB-C语言函数(实验室特性):编译生成动态库

时间:2024-01-23 20:09:06

编译生成动态库

在使用用户定义的C代码之前,必须编译链接生成一个能被服务器动态载入的文件。确切的说,需要生成一个共享库文件。

首先源文件被编译成一个目标文件,然后目标文件被连接起来。目标文件需要被创建成position-independent code (PIC),这意味着当它们被载入时,可以被放置在内存中的任意位置。

下面例子中,我们以文件isNumber.c为例,并且创建一个共享库isNumber.so。

Linux创建PIC的编译器标志是-fpic。在不同平台上的,需要参考GCC手册。创建一个共享库的编译器标志是-shared。一个完整的例子:

gcc -fpic -c isNumber.cpp -I  include/postgresql/server/
gcc -shared -o isNumber.so isNumber.o

上述命令也可以连在一起:

 gcc -shared -fpic -o isNumber.so isNumber.cpp -I  include/postgresql/server/

其中include/postgresql/server/ 为服务器对外发布的头文件路径,在安装目录下面。

gcc版本要求在7.3.0或者7.3.0之上。

为保证C函数兼容性,若涉及数据库升级,用户需要基于升级后的头文件重新编译C函数共享库。

在服务端加载过动态库后,不可在环境上手动修改该动态库,否则可能出现段错误或其他未知问题。

support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0699.html