Sun Java System Web Server 7.0 Update 3 NSAPI Developer's Guide

Compiling and Linking

Compile and link your code with the native compiler for the target platform. For UNIX, use the gmake command. For Windows, use the nmake command. For Windows, use Microsoft Visual C++ 6.0 or newer. You must have an import list that specifies all global variables and functions to access from the server binary. Use the correct compiler and linker flags for your platform. Refer to the example Makefile in the install-dir/samples/nsapi directory.

Adhere to the following guidelines for compiling and linking.

Including Directory and nsapi.h File

Add the install-dir/include (UNIX) or install-dir\include (Windows) directory to your makefile to include the nsapi.h file.

Libraries

Add the install-dir/bin/https/lib (UNIX) or install-dir\bin\https\bin (Windows) library directory to your linker command.

The following table lists the library that you need to link to.

Table 2–1 Libraries

Platform

Library

Windows 

ns-httpd40.dll in addition to the standard Windows libraries

HP-UX 

libns-httpd40.sl

All other UNIX platforms 

libns-httpd40.so

Linker Commands and Options for Generating a Shared Object

To generate a shared library, use the commands and options listed in the following table.

SolarisTM Operating System (SPARC® Platform Edition)

ld -G or cc -G

Windows

link -LD

HP-UX

cc +Z -b -Wl,+s -Wl,-B,symbolic

AIX

cc -p 0 -berok -blibpath:$(LD_RPATH)

Compaq

cc -shared

Linux

gcc -shared

IRIX

cc -shared

Additional Linker Flags

Use the linker flags in the following table to specify which directories should be searched for shared objects during runtime to resolve symbols.

Solaris SPARC

-R dir:dir

Windows

no flags, but the ns-httpd40.dll file must be in the system PATH variable

HP-UX

-Wl,+b,dir,dir

AIX

-blibpath:dir:dir

Compaq

-rpath dir:dir

Linux

-Wl,-rpath,dir:dir

IRIX

-Wl,-rpath,dir:dir

On UNIX, you can also set the library search path using the LD_LIBRARY_PATH environment variable, which must be set when you start the server.

Compiler Flags

The following table lists the flags and defines you need to use for compilation of your source code.

Solaris SPARC

-DXP_UNIX -D_REENTRANT -KPIC -DSOLARIS

Windows

-DXP_WIN32 -DWIN32 /MD

HP-UX

-DXP_UNIX -D_REENTRANT -DHPUX

AIX

-DXP_UNIX -D_REENTRANT -DAIX $(DEBUG)

Compaq

-DXP_UNIX -KPIC

Linux

-DXP_UNIX -D_REENTRANT -fPIC

IRIX

-o32 -exceptions -DXP_UNIX -KPIC

Compiling and Linking in 64–bit Mode

On the Solaris platform, the server can run in either 32–bit or 64–bit mode. Because a 32–bit shared library cannot be used in a 64–bit process and conversely, you may want to compile and link two separate shared libraries. By default, the Sun compiler and linker produce 32–bit binaries. To compile and link your plug-in for 64–bit mode on Solaris SPARC, you must use Sun Workshop 5.0 or higher with the -xarch=v9 flag. To compile and link your plug-in for 64–bit mode on Solaris x86, you must use Sun Java Studio 11 or higher with the -xarch=amd64 flag.

Issues With Using C++ in a NSAPI Plug-in

NSAPI plug-ins are typically written using the C programming language. Using the C++ programming language in an NSAPI plug-in raises special compatibility issues.

On Solaris, the server is built using the new C++ 5 ABI. If your shared library uses C++, it must be compiled with Sun Workshop 5.0 or higher. Sun Java Studio 11 or higher is recommended. Do not use the -compat=4 option when compiling and linking a shared library that uses C++. When running in 32–bit mode on Solaris SPARC, the server provides some backward compatibility for the old C++ 4 ABI or Sun Workshop 4.2. This backward compatibility may be removed at some future date. For all new NSAPI plug-ins, use the new C++ 5 ABI or Sun Workshop 5.0 or later versions.

On Linux, Web Server is built using the gcc 3.2 C++ ABI. If your shared library uses C++, compile with gcc 3.2.x. Because of the volatility of the gcc C++ ABI, avoid using C++ in NSAPI plug-ins on Linux.