编译 C++ 库
仅支持使用 GNU g++ 编译器来编译 UDx 库。请始终基于 Vertica 群集上使用的相同 Linux 版本来编译 UDx 代码。
编译库时,始终必须执行下列操作:
-
使用
-std=c++11
标志进行编译。 -
将
-shared
和-fPIC
标记传递到链接器。最简单的方法是在编译和链接库时仅将这些标记传递到 g++。 -
使用
-Wno-unused-value
标记可抑制未使用宏参数时的警告。如果不使用此标记,您可能会收到“left-hand operand of comma has no effect”(逗号的左操作数无效)警告。 -
编译
sdk/include/Vertica.cpp
并将其链接到库。此文件包含可帮助 UDx 与 Vertica 通信的支持例程。执行此操作的最简单方法是将此文件包含到用于编译库的 g++ 命令中。Vertica 以 C++ 源代码(而非库)的形式提供此文件,以避免库兼容性问题。 -
使用 g++
-I
标记将 Vertica SDK include 目录添加到 include 搜索路径中。
SDK 示例包括一个工作生成文件。请参阅下载并运行 UDx 示例代码。
编译 UDx 的示例
以下命令可将一个 UDx(包含于名为 MyUDx.cpp
的单个源文件中)编译到名为 MyUDx.so
的共享库中:
g++ -I /opt/vertica/sdk/include -Wall -shared -Wno-unused-value \
-fPIC -o MyUDx.so MyUDx.cpp /opt/vertica/sdk/include/Vertica.cpp
重要
Vertica 仅支持在 64 位架构上开发 UDx。调试 UDx 后,便已准备好部署它。使用 -O3
标记重新编译 UDx,以启用编译器优化。
可以将其他源文件添加到库中,方法是将这些源文件添加到命令行中。还可以分别编译这些源文件,然后将它们链接到一起。
提示
Vertica SDK 目录中的 examples 子目录包含一个生成文件,此文件可以用作您自己的 UDx 项目的起点。处理外部库
必须将 UDx 库链接到 UDx 代码所依赖的任何支持库。这些库必须是您开发的库或由第三方提供的其他库。可以使用以下两个选项进行链接:
-
静态地将支持库链接到 UDx。此方法的优点是 UDx 库不依赖外部文件。拥有一个 UDx 库文件可以简化部署,因为您只需将一个文件传输到 Vertica 群集。此方法的主要缺点是增加 UDx 库文件的大小。
-
动态地将库链接到 UDx。如果第三方库不允许静态链接,则有时必须使用动态链接。在这种情况下,必须将库和 UDx 库文件复制到 Vertica 群集。