编译 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

调试 UDx 后,便已准备好部署它。使用 -O3 标记重新编译 UDx,以启用编译器优化。

可以将其他源文件添加到库中,方法是将这些源文件添加到命令行中。还可以分别编译这些源文件,然后将它们链接到一起。

处理外部库

必须将 UDx 库链接到 UDx 代码所依赖的任何支持库。这些库必须是您开发的库或由第三方提供的其他库。可以使用以下两个选项进行链接:

  • 静态地将支持库链接到 UDx。此方法的优点是 UDx 库不依赖外部文件。拥有一个 UDx 库文件可以简化部署,因为您只需将一个文件传输到 Vertica 群集。此方法的主要缺点是增加 UDx 库文件的大小。

  • 动态地将库链接到 UDx。如果第三方库不允许静态链接,则有时必须使用动态链接。在这种情况下,必须将库和 UDx 库文件复制到 Vertica 群集。