Je dois utiliser libcurl dans un logiciel que j'écris sur ma machine Ubuntu. J'utilise Eclipse pour écrire et compiler tous les logiciels. Lorsque je mets les fichiers libcurl dans le même dossier que le fichier .cpp et que j'inclus le fichier curl.h dans l'en-tête, lorsque j'essaie de compiler le programme, il arrive avec ces erreurs:
Building target: sms
Invoking: GCC C++ Linker
g++ -o"sms" ./src/sms.o
./src/sms.o: In function `main':
/home/geekman/workspace/sms/Debug/../src/sms.cpp:38: undefined reference to `curl_easy_init'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:42: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:44: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:46: undefined reference to `curl_easy_perform'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:47: undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
make: *** [sms] Error 1
J'ai pris le contenu du dossier include de libcurl et je l'ai placé dans le même dossier que le fichier .cpp. puis dans l'en-tête du fichier .cpp, j'ai tapé:
#include <curl/curl.h>
J'ai aussi essayé:
#include "curl/curl.h"
Des idées sur le problème? Merci.
Les inclusions de votre fichier d'en-tête sont très bien; votre problème se produit à l'étape de la liaison. Pour établir un lien avec libcurl, vous devez ajouter le -lcurl
option de ligne de commande, en supposant qu'il soit installé dans un répertoire standard:
g++ -o sms ./src/sms.o -lcurl
S'il n'est pas installé dans un répertoire standard, vous devez également ajouter le -L/path/to/libcurl
, par exemple. quelque chose comme:
# Assuming that /home/geekman/workspace/libcurl is where libcurl.a is located
g++ -o sms ./src/sms.o -L/home/geekman/workspace/libcurl -lcurl
Notez également que le -lcurl
l'option doit apparaître après la liste des fichiers objets que vous liez, sinon elle ne se liera pas correctement.
Vous pouvez essayer d'utiliser curl-config --libs
.
Une réponse alternative (la première est excellente). Pensez à utiliser la sortie renvoyée par "pkg-config --libs libcurl" comme argument de votre compilateur.
Par exemple,
CPPFLAGS = `pkg-config --libs libcurl`
g ++ $ CPPFLAGS monfichier.o
Pkg-config est un moyen standard pour les bibliothèques open source de vous communiquer comment les lier/#inclure leurs fichiers.
Si vous utilisez ecplise CDT, vous devez suivre les étapes suivantes. Entrée sur le terminal
curl-config --libs
Sur ma machine, le résultat est
-L/usr/lib/i386-linux-gnu -lcurl
puis faites selon cette capture d'écran et vous pourrez compiler. btw n'oubliez pas d'ajouter des fichiers d'en-tête dans votre code
Vous entrez donc le chemin du dossier de la bibliothèque sans -L et le nom de la bibliothèque sans -l car ils seront automatiquement ajoutés par l'éditeur de liens.
Vous devez lier la bibliothèque à votre programme. Avec gcc (et la plupart des autres compilateurs), vous pouvez spécifier les bibliothèques à lier avec -lname_wo_lib
, par exemple. -lcurl
Voir aussi GNU GCC Manual - Options for Linking pour une explication détaillée des options proposées par Adam Rosenfield. Pour les répertoires de recherche standard, voir An Introduction to GCC - for the GNU Compilers gcc and g ++ - Setting Search Paths .