2013-09-05 5 views
0

J'ai libcommon.so dans/usr/local/lib et je lie cette bibliothèque dans mon programme./usr/bin/ld: impossible de trouver la bibliothèque partagée

test de gcc test_prog.c -L/usr/local/lib -llibcommon.so

et j'ai essayé trop

gcc -o test_prog.c test -L/usr/local/lib -llibcommon

Il est donner

/usr/bin/ld: ne peut pas trouver -llibcommon.so
collect2: ld retourné 1 état de sortie

Il est là:

$ locate libcommon.so 
/usr/local/lib/libcommon.so 
/usr/local/lib/libcommon.so.0 
/usr/local/lib/libcommon.so.0.1.0 
$ 

Répondre

6

Lorsque vous utilisez le -l, vous spécifiez simplement le nom de la bibliothèque « de base »:

-lcommon 

Cela traquer libcommon.so dans un répertoire.

Vous avez dit au compilateur d'essayer de trouver liblibcommon.so.so (et liblibcommon.so) et il ne pourrait probablement pas ... en effet, vous ne poseriez pas la question si cela était possible.

Certains programmes GNU construire une bibliothèque libiberty.so (ou son équivalent), de sorte que les lignes de liaison en utilisant le lien de bibliothèque:

-liberty 

(qui est drôle, GNU serait vraiment plutôt il était +liberty, mais .. vous ne pouvez pas tout réparer).

+0

je reçois ce après avoir changé selon vous/usr//libcommon.so.0 local/lib: ne pouvait pas lire les symboles: Opération non valide collect2: ld retourné 1 état de sortie – user2732944

+0

Maintenant, vous avez un problème différent. L'éditeur de liens trouve la bibliothèque, mais ne peut pas donner un sens à ce qu'il contient. Je suggère de commencer par exécuter 'fichier /usr/lib/libcommon.so/lib/libc.so' et de voir s'il y a une différence évidente entre les types de fichiers. Vous devrez peut-être suivre des liens symboliques (vous devrez peut-être spécifier un nom différent dans la ligne de commande 'file'.) S'il y a une grande différence, vous avez peut-être installé le ou les mauvais fichiers - ou l'administrateur système peut avoir fait cela . –

1

Utilisez -lcommon commutateur lorsque vous liez libcommon.so

0

essayez d'exporter LD_LIBRARY_PATH pointant vers le répertoire où vous avez gardé les fichiers donc.

export LD_LIBRARY_PATH =/pathofdirectorywheresofilesarekept

Questions connexes