Problem linking c-program

From: Frank Langelage <frank_at_lafr.de>
Date: Sat, 18 Feb 2012 22:56:28 +0100
Message-ID: <9qal4dFofdU1_at_mid.individual.net>



Hi,

linking a program on Solaris 10 fails suddenly with this messages:
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`dlclose_at_SISCD_2.3'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`modf_at_SYSVABI_1.3'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`dlsym_at_SISCD_2.3'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`dlopen_at_SISCD_2.3'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`ldexp_at_SYSVABI_1.3'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`gethostname_at_SUNWprivate_1.1'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`dladdr_at_SUNW_0.8'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`isnan_at_SYSVABI_1.3'
/opt/oracle/product/o10gR2/lib32/libclntsh.so: undefined reference to
`dlerror_at_SISCD_2.3'

This problem occurs on one machine.
On this machine Oracle client software was upgraded from 10.2.0.3 to 10.2.0.5. Reinstallation of Oracle client 10.2.0.1 and 10.2.0.3 did not help.

libclntsh.so is a symbolic link to libclntsh.so.10.1

       17 Feb 18 22:01 libclntsh.so -> libclntsh.so.10.1 22253184 Feb 18 22:01 libclntsh.so.10.1

ldd show these dependencies:
oracle_at_sb2000:/opt/oracle/product/o10gR2/lib32 ldd libclntsh.so.10.1

         libnnz10.so =>   /opt/oracle/product/o10gR2/lib32/libnnz10.so
         libkstat.so.1 =>         /lib/libkstat.so.1
         libnsl.so.1 =>   /lib/libnsl.so.1
         libsocket.so.1 =>        /lib/libsocket.so.1
         libgen.so.1 =>   /lib/libgen.so.1
         libdl.so.1 =>    /lib/libdl.so.1
         libc.so.1 =>     /lib/libc.so.1
         libaio.so.1 =>   /lib/libaio.so.1
         librt.so.1 =>    /lib/librt.so.1
         libsched.so.1 =>         /usr/lib/libsched.so.1
         libm.so.2 =>     /lib/libm.so.2
         libmp.so.2 =>    /lib/libmp.so.2
         libmd.so.1 =>    /lib/libmd.so.1
         libscf.so.1 =>   /lib/libscf.so.1
         libdoor.so.1 =>  /lib/libdoor.so.1
         libuutil.so.1 =>         /lib/libuutil.so.1
         /platform/SUNW,Sun-Blade-1000/lib/libc_psr.so.1
         /platform/SUNW,Sun-Blade-1000/lib/libmd_psr.so.1


The weird thing is, that sqlplus32 is dynamically linked against libclntsh.so, but is runnable:
oracle_at_sb2000:/opt/oracle/product/o10gR2 ldd bin/sqlplus32

         libsqlplus.so =>
/opt/oracle/product/o10gR2/lib32/libsqlplus.so

         libclntsh.so.10.1 =>
/opt/oracle/product/o10gR2/lib32/libclntsh.so.10.1

         libnnz10.so =>   /opt/oracle/product/o10gR2/lib32/libnnz10.so
         libkstat.so.1 =>         /lib/libkstat.so.1
         libnsl.so.1 =>   /lib/libnsl.so.1
         libsocket.so.1 =>        /lib/libsocket.so.1
         libgen.so.1 =>   /lib/libgen.so.1
         libdl.so.1 =>    /lib/libdl.so.1
         libc.so.1 =>     /lib/libc.so.1
         libaio.so.1 =>   /lib/libaio.so.1
         librt.so.1 =>    /lib/librt.so.1
         libsched.so.1 =>         /usr/lib/libsched.so.1
         libm.so.2 =>     /lib/libm.so.2
         libthread.so.1 =>        /lib/libthread.so.1
         libm.so.1 =>     /lib/libm.so.1
         libmp.so.2 =>    /lib/libmp.so.2
         libmd.so.1 =>    /lib/libmd.so.1
         libscf.so.1 =>   /lib/libscf.so.1
         libdoor.so.1 =>  /lib/libdoor.so.1
         libuutil.so.1 =>         /lib/libuutil.so.1
         /platform/SUNW,Sun-Blade-1000/lib/libc_psr.so.1
         /platform/SUNW,Sun-Blade-1000/lib/libmd_psr.so.1

sb2000.[maj2e_langfr]/mbi/mbi2e_all. sqlplus32 $FXUSERID

SQL*Plus: Release 10.2.0.5.0 - Production on Sa Feb 18 22:45:34 2012

Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

Verbunden mit:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> The link command is
/usr/gnu/gcc32/bin/g++ -pedantic -Wall -Wfloat-equal -Wno-long-long -s
-L/mbi/mbi2e_all/fix410/sparc58-ora1020/lib -L/mbi/maj2e_objs   /mbi/maj2e_objs/mbi_start_main.o -lmbi_start -lmbi_abf -lmbi_ein

-lmbi_mawi -lmbi_fert -lmbi_kal -lmbi_bdv -lmbi_forms -lmbi_euro 
-lmbi_fibu -lmbi_stamm -lmbi_basis -lmbi_webservices -lmbi_sqlstdspec 
-lmbi_sqlspec -L/mbi/maj2e_objs -lmbi_sql1  -lmbi_sql2  -lmbi_sql3 
-lmbi_sqlstd1 -lbcas -lb_system -lb_ldap -L/usr/gnu/lib -lldap -llber 
-lsasl2 -lgssapi_krb5 -lkrb5  -lssl -lk5crypto -lcrypto -lcom_err 
-lkrb5support -lresolv -lsocket -lnsl 

/mbi/mbi2e_all/fix410/sparc58-ora1020/lib/fxcursor-p.o
/mbi/mbi2e_all/fix410/sparc58-ora1020/lib/sql-p.o
/mbi/mbi2e_all/fix410/sparc58-ora1020/lib/perf-p.o -lfix -lipc
-L/opt/oracle/product/o10gR2/lib32 -lclntsh `cat
/opt/oracle/product/o10gR2/lib32/ldflags` `cat
/opt/oracle/product/o10gR2/lib32/sysliblist`
-R/opt/oracle/product/o10gR2/lib32 -laio -lposix4 -lm -lthread -lm
/usr/gnu/lib/libfl.a /usr/gnu/lib/libtomcrypt.a /usr/gnu/lib/libxmlrpc.a
/usr/gnu/gcc32compiled/lib/libxslt.a
/usr/gnu/gcc32compiled/lib/libxml2.a /usr/gnu/lib/libiconv.a
/usr/gnu/lib/libz.a /usr/gnu/lib/liblpsolve55.a
/usr/gnu/g++32/lib/libgsoap++.a

-o /mbi/maj2e_bin/mbi_start

As you can see, after -lclntsh the content of ldlfags and sysliblist is added.
sysliblist contains -lkstat -lnsl -lsocket -lgen -ldl -lc -laio -lposix4 -lsched.
So libdl.so, libc.so are added here containing most of the missing symbols. Library libm is also added separately. Exact this same comamndline works on other machines with Solaris 9 and 10. So this is probably not the cause of the problem. Received on Sat Feb 18 2012 - 15:56:28 CST

Original text of this message