Unresolved symbol <symbol> or Undefined reference to <symbol>
- General Guidance
- If the error messages came up during a Multi-Tier Generic Client installation
- If the error messages came up while relinking a Multi-Tier Database Agent or Single-Tier Lite Driver for Progress, on Linux
- If the error messages came up while relinking any other Multi-Tier Database Agent or Single-Tier Lite Driver
- Evidence
General Guidance
To resolve these errors, start by finding where the missing symbols are defined:
- Access the machine, which contains your
OpenLink server components installation.
-
cd
into your database's
sub-directory./lib
- Run the following command:
nm -A *.so | grep <symbol>
For example, if the error you got was "
" or "Unresolved symbol xsendto
", the command would beUndefined reference to xsendto
nm -A *.so | grep xsendto
- If the symbol does not exist, stop and contact
OpenLink Product Support. Otherwise,....
- Record the names of the files which contain your symbols.
The filename will be the first item in the
nm
output.
If the error messages came up during a Multi-Tier Generic Client installation
Add the directory/ies that contains the library/ies found above to the shared library environment variable for your OS (i.e.,
,
, or
).
For example:
set LIBPATH=/app/product/oracle/8.0.4/lib:$LIBPATH
If the error messages came up while relinking a Multi-Tier Database Agent or Single-Tier Lite Driver for Progress, on Linux
For errors regarding __ctype_b
, __ctype_tolower
, and __ctype_toupper
, follow the guidance in this section.
For other errors, proceed to the next section below.
Instructions in this section were based on Progress Knowledgebase Article ID#P101259.
32-bit __ctype_b
, __ctype_tolower
, and __ctype_toupper
.
These definitions are not contained in more recent versions of glibc -- but they remain necessary for Database Agent or Lite Driver relinking. You can either relink on a Linux machine which has such an older version of glibc (again, 2.3.2-5 or earlier), or follow the instructions below.
- Create a file named "
libctype.c
" with these contents --
#include <stdlib.h> #include <ctype.h> __const unsigned short int * __ctype_b; __const __int32_t * __ctype_tolower; __const __int32_t * __ctype_toupper; void __attribute__((constructor)) my_init() { __ctype_b = * __ctype_b_loc(); __ctype_tolower = * __ctype_tolower_loc(); __ctype_toupper = * __ctype_toupper_loc(); } void __attribute__((destructor)) my_clean() { }
- Compile that with the command --
gcc -O2 -shared -o libctype.so libctype.c
- Amend your ldpro script, or build_rx.sh for
OpenEdge 10, to include a reference to the newly created libctype.so library.
- Execute the ldpro script, or build_rx.sh for
OpenEdge 10; the build should now succeed.
- Be sure to deploy the new libctype.so along with the executable you just built, as the executable now depends on this library.
If the error messages came up while relinking any other Multi-Tier Database Agent or Single-Tier Lite Driver
-
cd
into the
sub-directory of your/lib OpenLink installation.
- Open the script which produced the error in your favorite text editor (vi, emacs, etc.).
- Determine where to add the new library.
Most often, it is added to the
cc -s -o
line. Oracle users must add it to themake -f
line. Progress users who encounter errors withmkdlc
must add it to$PRO_EXTRA
. For example:
$PRO_EXTRA \ $PROLOAD/4gl/<missing file>.o \
- Save your changes and exit your relink script.
- Relink your database agent.
Evidence
- Database Agent Version String
- DBMS Version
- Relink Script(s)
- Output of
uname -a
Referenced by...