<< Previous Tip > Tips Table < Next Tip >>

Avanti Product Banner

"Unable to find public symbol ..."
Error Messages




When attempting to load a NetWare Loadable Module (NLM) for the first time or while upgrading the version of NetWare in use, it is not unusual for the NLM to fail to load and display one of more "Unable to find public symbol ..." messages on the Server Console. Resolving the error usually entails updating the version of CLIB in use, or one of the other support modules which are required by the NLM being loaded. However, it can be the result of an attempt to load an NLM specifically coded for NetWare v3 support on a NetWare v4 Server, or vice versa. Frustration can often set in while trying to determine what route to take.

To better understand the problem, it is important to understand the need for public symbols. Within the NetWare kernel and any NLMs loaded on the Server there are code subroutines and data items which are utilized. Often there is a need to make the data items or code subroutines accessible to other NLMs. In such cases, the designer can export the label which references the memory location as a public symbol. At this point, the information or logic becomes public and available to any module which is designed to utilize it.

The NetWare kernel has hundreds of public symbols, most of which are not publicly documented. However, many are used by Novell's own support modules, such as CLIB, MONITOR, REMOTE, and others.

CLIB is the 'C' Library interface used by most third party NLMs to access much of the information and many of the support routines within the NetWare kernel. CLIB provides third party NLMs with entry points to routines which can validate the kernel requests and provide a wealth of Server Information. When loaded, CLIB will export hundreds of public symbols for use by other modules.

When being loaded, an NLM will display an error message "Unable to find public symbol ..." if it is unable to resolve all of the references to public symbols which it requires. In such cases, the first thing to check is if there are any other support modules which may be required that have not already been loaded.

    For example:
      TCPIP.NLM requires SNMP.NLM and CLIB.NLM to be loaded.
      CLIB.NLM requires STREAMS.NLM to be loaded.
      RSPX.NLM requires REMOTE.NLM to be loaded.
It is possible for the NLM developer to auto-load the required modules. However, some do not include the logic into their design. Check the documentation which accompanied the NLM to determine which supporting modules may be required to load.

Once it has been confirmed that all of the required support modules are loaded, the compatibility of the versions which are loaded should be checked. Since each new release of CLIB tends to alter the public symbols that are exported, merely loading the appropriate version of CLIB is often the resolution to the problem. It may be that the NLM requires a different release of the support modules or additional support modules which aren't already loaded.

Different releases of the NetWare NOS support ever changing internal routines and a constantly shifting set of public symbols. Older NLM releases require symbols which are no longer supported while newer NLM releases may require symbols not exported by older NetWare versions. This is often the cause during upgrades since the version of NetWare in use is likely to be changed.

The easiest way to avoid such conflicts is to check the documentation which accompanied the NLM to see which other modules may be required to load. It may be that it requires a different release of the support modules, additional support modules, or it may not support the version of NetWare in use.


This document is copyright © 1999 by avanti technology, inc.

<< Previous Tip > Tips Table < Next Tip >>