2010-08-26 8 views
1

gcc 4.4.3 C89 linuxapplication copie à une autre machine, ne peut pas trouver la bibliothèque partagée

J'utilise log4c et ont placé le inc et lib dans les répertoires suivants

/home/jeff/projects/gateway/tools/log4c/inc 
/home/jeff/projects/gateway/tools/log4c/lib 

Dans mon Makefile je a précisé le inc et le chemin lib:

INC_PATH = -I tools/log4c/inc 
LIB_PATH = -L tools/log4c/lib 
LIBS = -llog4c 

Dans mon répertoire lib je les bibliothèques partagées suivantes:

lrwxrwxrwx 1 root root  17 2010-08-26 15:57liblog4c.so -> liblog4c.so.3.1.0 
lrwxrwxrwx 1 root root  17 2010-08-26 15:57 liblog4c.so.3 -> liblog4c.so.3.1.0 
-rw-r--r-- 1 root root 100180 2010-08-26 15:55 liblog4c.so.3.1.0 

compiler mon application sur ma machine de développement, puis copiez le répertoire binaire et des outils pour la machine d'essai

Alors, quand j'exécute binaire sur la machine de test, je reçois l'erreur suivante:

./app: error while loading shared libraries: liblog4c.so.3: cannot open shared object file: No such file or directory 

Cependant, tout fonctionne bien sur ma machine de développement qui a la même structure de répertoire, par exemple

machine dev:

/projects/gateway/app 
/projects/gateway/tools/log4c/inc 
/projects/gateway/tools/log4c/lib 

machine de test:

/projects/gateway/app 
/projects/gateway/tools/log4c/inc 
/projects/gateway/tools/log4c/lib 

Je me demande pourquoi il ne peut pas trouver la bibliothèque partagée.

Un grand merci pour toutes les suggestions,

Répondre

2

/projects/gateway/tools/log4c/lib doit être soit mis à /etc/ld.so.conf (appel/sbin/ldconfig après) ou à LD_LIBRARY_PATH variable shell si l'éditeur de liens dynamique ne saurait où chercher pour la bibliothèque partagée requise.

Voir Program Library HOWTO (3.5. Installation et utilisation d'une bibliothèque partagée) pour plus d'informations

+0

Que diriez-vous à l'aide du rpath. La raison pour laquelle j'ai demandé est parce que l'utilisateur ne saura pas comment configurer le système. Je vais juste leur donner les binaires et le client veut juste exécuter l'application. Merci. – ant2009

+1

oui, utiliser 'rpath' est aussi une option, il vous suffit de mettre le chemin valide (pour dev, test et production) de la librairie. Si c'est relatif, vous devrez exécuter le programme à partir du répertoire spécifié, où le chemin sera valide. –

Questions connexes