Compiling and Linking a Function Module
Go Up to Working with UDFs and Blob Filters
After a UDF module is complete, you can compile it in a normal fashion into object or library format. You then declare the UDFs in the resulting object or library module to the database using the DECLARE EXTERNAL FUNCTION
statement. Once declared to the database, the library containing all the UDFs is automatically loaded at run time from a shared library or dynamic link library.
- Include
ibase.h
in the source code if you use typedefs defined in the InterBaseibase.h
header file. All “include” (*.h
) libraries are in the <<InterBase_home>>/SDK/include
directory. - Link to
gds32.dll
if you use calls to InterBase library functions. - Linking and compiling:
Microsoft Visual C/C++ Link with <<InterBase_home>>/SDK /lib_ms/ib_util_ms.lib
and include <<InterBase_home>>/SDK/include/ib_util.h
Use the following options when compiling applications with Microsoft C++:
Option | Action |
---|---|
|
Compile without linking (DLLs only) |
|
Generate complete debugging information |
|
Defines “WIN32” |
|
Use a multi-thread, statically-linked library |
C++ Link with <<InterBase_home>>/SDK/lib/ib_util.lib
and include <<InterBase_home>>/SDK/include/ib_util.h
Delphi Use <<InterBase_home>>/SDK/include/ib_util.pas
.
Examples: The following commands use the Microsoft compiler to build a DLL that uses InterBase:
cl -c -Zi -DWIN32 -D_MT -LD udf.c lib -out:udf.dll -def:funclib.def -machine:i586 -subsystem:console link -DLL -out:funclib.dll -DEBUG:full,mapped -DEBUGTYPE:CV -machine:i586 -entry:_DllMainCRTStartup@12 -subsystem:console -verbose udf.obj udf.exp gds32_ms.lib ib_util_ms.lib crtdll.lib
This command builds an InterBase executable using the Microsoft compiler:
cl -Zi -DWIN32 -D_MT -MD udftest.c udf.lib gds32_ms.lib ib_util_ms.lib crtdll.lib
See the makefiles (makefile.bc
and makefile.msc
on Windows platforms, makefile
on UNIX) in the InterBase examples
subdirectory for details on how to compile a UDF library.
Examples: For examples of how to write thread-safe UDFs, see <<InterBase_home>>/examples/UDF/udflib.c
.
Creating a UDF Library
UDF libraries are standard shared libraries that are dynamically loaded by the database at runtime. You can create UDF libraries on any platform—except NetWare—that is supported by InterBase. To use the same set of UDFs with databases running on different platforms, create separate libraries on each platform where the databases reside. UDFs run on the server where the database resides.
- Note: A library, in this context, is a shared object that typically has a
dll
extension on Windows platforms, and aso
extension on Solaris and Linux.
The InterBase examples
directory contains sample makefiles (makefile.bc
and makefile.msc
on Windows platforms, makefile
on UNIX) that build a UDF function library from udflib.c
.
Modifying a UDF Library
To add a UDF to an existing UDF library on a platform:
- Compile the UDF according to the instructions for the platform.
- Include all object files previously included in the library and the newly-created object file in the command line when creating the function library.
- Note: On some platforms, object files can be added directly to existing libraries. For more information, consult the platform-specific compiler and linker documentation.
To delete a UDF from a library, follow the linker’s instructions for removing an object from a library. Deleting a UDF from a library does not eliminate references to it in the database.