| << Previous Tip | > Tips Table < | Next Tip >> |
"Unable to find public symbol ..." |
|
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.
CLIB.NLM requires STREAMS.NLM to be loaded. RSPX.NLM requires REMOTE.NLM to be loaded.
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.
|
| << Previous Tip | > Tips Table < | Next Tip >> |