construire et relier une bibliothèque partagée
im essayant de construire une bibliothèque partagée sur un ordinateur windows cygwin plate-forme à l'aide de g++, et, plus tard, faire le lien avec un autre fichier cpp:
j'utilise les commandes suivantes:
//generate object file
g++ -g -c -Wall -fPIC beat11.cpp -o beat11.o
//to generate library from the object file
g++ -shared -Wl,-soname,libbeat.so.1 -o libbeat.so.1.0.1 beat11.o -lc
//to link it with another cpp file; -I option to refer to the library header file
g++ -L. -lbeat -I . -o checkbeat checkbeat.cpp
tout en les reliant, l'erreur suivante survient:
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld:
cannot find -llibbeat.so.1.0.1
collect2: ld returned 1 exit status
la bibliothèque est créée, mais je ne peux que trouver libbeat..1.0.1, pas libbeat.ou libbeat..1(ou ne sont-ils pas censés être là?)
une des autres questions, suggère de créer un lien symbolique vers libbeat..1.0.1, mais qui na pas trop de travail
source d'informationauteur jayant | 2012-05-25
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de
-l<libname>
pour spécifier la bibliothèque de lien, l'éditeur de liens de recherche pourlib<libname>.so
avant de chercherlib<libname>.a
.Dans votre cas, il ne fonctionne pas, parce que le nom de la librairie n'est pas avec
.so
suffixe.Vous pouvez créer simlink
ou
Vous pouvez également utiliser
-l:libbeat.so.1.0.1
(si votre linker supporte, vérifier dansman ld
description de-l
paramètre). Une autre option est de spécifier la bibliothèque, sans-l
Noter que la bibliothèque de lien doit être mis après l'objet/le fichier source à l'aide de ses symboles - sinon, l'éditeur de liens ne peuvent pas trouver les symboles.