DataBlade user-defined routines
This topic provides information about how to compile and link a DataBlade user-defined routine (UDR).
cl /DNT_MI_SAPI /DMI_SERVBUILD
-Id:\msdev\include -Id:\informix\incl\public -Id:\informix\incl
-c func1.c
link /DLL /OUT:func1.dll /DEF:func1.def func1.obj d:\informix\lib\SAPI.LIB
In the preceding example, d: specifies the drive on which Informix software is installed; informix is the directory that INFORMIXDIR specifies. The resulting dynamic link libraries (DLLs) must have the READONLY attribute set with the attrib +r command.
The Microsoft compiler, cl, defaults to the /MT option, which specifies the multithreaded library for DLL builds. This multithreaded library is statically linked to the DLL. You can specify the /MD option to put MSVCRT40.DLL in a command path. All the UDRs that are built with /MD use one copy of the LIBC DLL. This option prevents virtual-memory buildup in the database server when many UDRs are loaded.
cl /MD /DNT_MI_SAPI /DMI_SERVBUILD \
-Id:\msdev\include -Id:\informix\incl\public -Id:\informix\incl
-c func1.c
Error loading UDR
On UNIX platforms, the GLS libraries are not linked to the database server. Therefore, you must explicitly specify the location and name of the Informix GLS library, as you do for DataBlade client applications.
The location of the Informix GLS header file, ifxgls.h, is the $INFORMIXDIR/incl/public directory. This directory contains many of the other files that a DataBlade client application uses. Make sure that you include this directory with the -I option of the compiler.
Additionally, you need to indicate that the DataBlade module is a DataBlade UDR (which runs on the server computer), not a DataBlade client application (which runs on a client computer). Include the MI_SERVBUILD compiler flag when you compile a DataBlade UDR.
% cc -KPIC -DMI_SERVBUILD -I$INFORMIXDIR/incl/public -I$INFORMIXDIR/incl
-L$INFORMIXDIR/esql/lib -c func1.c
% ld -G func1.o -o udrs.so