Vertica Analytics Platform Version 9.3.x Documentation
Compiling Your C++ Library
GNU g++ is the only supported compiler for compiling UDx libraries. Always compile your UDx code on the same version of Linux that you use on your Vertica cluster.
When compiling your library, you must always:
- Compile with the
- Pass the
-fPICflags to the linker. The simplest method is to just pass these flags to g++ when you compile and link your library.
- Use the
-Wno-unused-valueflag to suppress warnings when macro arguments are not used. If you do not use this flag, you may get "left-hand operand of comma has no effect" warnings.
sdk/include/Vertica.cppand link it into your library. This file contains support routines that help your UDx communicate with Vertica. The easiest way to do this is to include it in the g++ command to compile your library. Vertica supplies this file as C++ source rather than a library to limit library compatibility issues.
- Add the Vertica SDK include directory in the include search path using the g++
The SDK examples include a working makefile. See Downloading and Running UDx Example Code.
Example of Compiling a UDx
The following command compiles a UDx contained in a single source file named
MyUDx.cpp into a shared library named
g++ -I /opt/vertica/sdk/include -Wall -shared -Wno-unused-value \ -fPIC -o MyUDx.so MyUDx.cpp
Vertica only supports UDx development on 64-bit architectures.
After you debug your UDx, you are ready to deploy it. Recompile your UDx using the
-O3 flag to enable compiler optimization.
You can add additional source files to your library by adding them to the command line. You can also compile them separately and then link them together.
The examples subdirectory in the Vertica SDK directory contains a make file that you can use as starting point for your own UDx project.
Handling External Libraries
You must link your UDx library to any supporting libraries that your UDx code relies on.These libraries might be either ones you developed or others provided by third parties. You have two options for linking:
- Statically link the support libraries into your UDx. The benefit of this method is that your UDx library does not rely on external files. Having a single UDx library file simplifies deployment because you just transfer a single file to your Vertica cluster. This method's main drawback is that it increases the size of your UDx library file.
- Dynamically link the library to your UDx. You must sometimes use dynamic linking if a third-party library does not allow static linking. In this case, you must copy the libraries to your Vertica cluster in addition to your UDx library file.
Was this topic helpful?