2011-08-27 7 views
2

Bonjour, J'essaie d'installer une nouvelle version de zlib, et je n'ai pas de droits root, donc je vais l'installer localement. Système d'installation est 1.2.3, et je suis en train d'utiliser 1.2.5liaison avec la version "locale" d'une bibliothèque

Je compile comme

g++ -g myProg.cpp myOs.o -lpthread -IzlibInc/ -LzlibLib/ -lz -o myProg 

utilisant ldd il dit

ldd myProg 
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c15800000) 
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000) 
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000) 
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000) 
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000) 
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000) 

donc il ne marche pas correctement lien.

Merci

///////////////////////////////////////////// 

mise à jour

J'ai 2 dossiers appelés zlibInc et zlibLib containint les en-têtes et les fichiers objet partagé.

ls zlibLib/ 
libz.a libz.so libz.so.1 libz.so.1.2.5 pkgconfig 
ls zlibInc/ 
zconf.h zlib.h 

mon code source est

cat zlibTest.cpp 
#include <cstdio> 
#include <zlib.h> 

int main(){ 
    fprintf(stderr,"%s\n",ZLIB_VERSION); 
    int *a=new int[10]; 

    gzread(stdin,a,5); 
    return 0; 
} 

Et ma ligne de commande pour la compilation est

g++ zlibTest.cpp -I zlibInc/ -L zlibLib/ -L . -I . -lz;ldd a.out 
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000) 
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000) 
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000) 
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000) 
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000) 
+0

Et si vous mettez '-lz' en premier? En outre, vous pouvez dire '-pthread' en tant qu'option de compilateur, vous n'avez donc pas besoin de lier cela manuellement. –

Répondre

5

Il fait le lien correctement. Zlib local et zlib à l'échelle du système ont le même SONAME et l'éditeur de liens d'exécution ne connaît rien de votre version locale. Vous pouvez fournir l'option -rpath à l'éditeur de liens (-Wl,-rpath=./zlibLib) ou définir la variable d'environnement LD_LIBRARY_PATH au moment de l'exécution (LD_LIBRARY_PATH=./zlibLib:$LD_LIBRARY_PATH ./myProg).

+0

Il est généralement déconseillé de définir «-rpath» comme chemin relatif: votre programme s'exécutera différemment selon que vous l'exécutez dans un sous-répertoire './ZlibLib /' ou non. Je suggère d'utiliser '-rpath = $ {PWD}/zlibLib' à la place. –

Questions connexes