Erreur de compilation: / usr / bin / ld: impossible de trouver -lclntsh

En essayant de comstackr un programme C en utilisant make file, je suis confronté à l’erreur de liaison suivante décrite ci-dessous.

Je sais que ce genre de problèmes est déjà discuté dans de nombreux autres posts, mais j’ai essayé avec les solutions proposées mais ils ne fonctionnaient pas tous.

/ usr / bin / ld: impossible de trouver -lclntsh

libclntsh.so et libclntsh.so.10.1 sont présents dans le chemin oracle /u01/app/oracle/product/10.2.0/lib et sont indiqués comme option -L dans le fichier make Je suis toujours confronté au problème: –

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 

S’il vous plaît laissez-moi savoir si d’autres informations sont nécessaires. Je vous remercie

Vous -aarchive à l’éditeur de liens. Il s’agit d’une option de compatibilité HP / UX qui est synonyme de -Bstatic , qui indique à l’éditeur de liens de ne pas lier de bibliothèques dynamics. Par conséquent, votre libclntsh.so est ignoré. Voir la documentation

Si vous ne savez pas pourquoi cette option existe, vous pouvez la supprimer et essayer à nouveau. Si vous savez que cela est nécessaire, vous devrez trouver des bibliothèques statiques, y compris libclntsh.a pour faire le lien.

Si vous avez déjà installé libclntsh.so.12.1 ou une application similaire, essayez de créer un lien symbolique avec libclntsh.so avec la commande suivante: ln -s /usr/lib/oracle/12.1/client64/lib/libclntsh.so.12.1 / usr / lib / oracle / 12.1 / client64 / lib / libclntsh.so

 [oracle@em12c bin]$ pwd /u01/em12c/middleware/oms/bin [oracle@em12c bin]$ export ORACLE_HOME=/u01/em12c/middleware/oms [oracle@em12c bin]$ ./genclntsh [oracle@em12c bin]$ ls -l /u01/em12c/middleware/oms/lib32//libclntsh.so lrwxrwxrwx. 1 oracle oinstall 17 Oct 23 22:16 /u01/em12c/middleware/oms/lib32//libclntsh.so -> libclntsh.so.11.1