Compilation error: /usr/bin/ld: cannot find -lclntsh
Beim Versuch zu kompilieren eines C-Programms mit Hilfe von make-Datei, ich bin mit der folgenden Verknüpfung Fehler unten beschrieben.
Ich kenne diese Art von Problemen sind bereits besprochen, in vielen anderen posts, aber ich habe versucht, mit den Lösungen, die vorgeschlagen wird, in Ihnen, aber Sie alle haben nicht funktioniert.
/usr/bin/ld: cannot find -lclntsh
libclntsh.so und libclntsh.so.10.1 sind in oracle-Pfad /u01/app/oracle/product/10.2.0/lib und, die gegeben ist als -L-option in der make-Datei. Noch immer stehe ich vor dem Problem:-
Linking yieldrpt ...
cc -v -g -D_HPUX_SOURCE -DPARETO -Wl,-aarchive -L/u01/app/oracle/product/10.2.0/lib/ yieldrpt.o -lclntsh `cat /u01/app/oracle/product/10.2.0/lib/ldflags` -lmalloc -ldl -lm \
-lmalloc -o yieldrpt
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)
/usr/libexec/gcc/i386-redhat-linux/4.1.2/collect2 --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2 -o yieldrpt /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbegin.o -L/u01/app/oracle/product/10.2.0/lib/ -L/usr/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib/gcc/i386-redhat-linux/4.1.2/../../.. -aarchive yieldrpt.o -lclntsh -lnbeq10 -lnhost10 -lnus10 -lnldap10 -lldapclnt10 -lnsslb10 -lntcp10 -lntcps10 -lnsslb10 -lntcp10 -lntns10 -lmalloc -ldl -lm -lmalloc -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i386-redhat-linux/4.1.2/crtend.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o
/usr/bin/ld: cannot find -lclntsh
collect2: ld returned 1 exit status
make: *** [yieldrpt] Error 1
Bitte lassen Sie mich wissen, wenn sonstige Infos benötigt wird.
Danke
- vielleicht ein 32bit vs. 64bit-Problem?
- Bitte
ls -alg /u01/app/oracle/product/10.2.0/lib/*clntsh*
. - /u01/app/oracle/product/10.2.0/lib/clntsh.Landkarte /u01/app/oracle/product/10.2.0/lib/libclntsh.also -> libclntsh.so.10.1 /u01/app/oracle/product/10.2.0/lib/libclntsh.so.10.1
- ammoq: überraschend lib und lib32 zeigen auf den selben Ordner in meinem oracle-installation für 10.2. Wäre das wirklich ein problem sein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übergeben Sie
-aarchive
an den linker. Dies ist eine HP/UX-Kompatibilitätdas ist gleichbedeutend mit
-Bstatic
, der leitet den linker nicht zu verknüpfen, dynamischeBibliotheken. Damit Ihre
libclntsh.so
ignoriert. Sehen die DokumentationWenn Sie nicht wissen, warum diese option können Sie auch entfernen Sie es und versuchen Sie es erneut. Wenn Sie
wissen, es ist notwendig, dann haben Sie zu finden statische Bibliotheken, einschließlich
libclntsh.a
zulink gegen.
Wenn Sie libclntsh.so.12.1 oder ähnliches bereits installiert ist, können Sie versuchen, ein Symlink auf die library zu libclntsh.also mit dem folgenden Befehl: ln -s /usr/lib/oracle/12.1/client64/lib/libclntsh.so.12.1 /usr/lib/oracle/12.1/client64/lib/libclntsh.so
libclntsh.so
. Mein problem war, dass ich brauchte einen soft-link für meinen compiler zu finden, der oben genannten Datei. Sobald ich dies getan hatte, funktionierte es ==>ln -s libclntsh.so.11.1 libclntsh.so
.