[CURL][C++] Compilation lib & utilisation

Signaler
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012
-
cs_Tibabou
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012
-
Bonjour,

Je viens ici après 3 heures de recherche. J'espère que vous pourrez m'aider.

J'ai téléchargé les sources de la librairie curl. J'ouvre le *.vcproj et compile directement.

Premier souci : VC++ génère seulement la lib static curllib.lib (comment obtenir la dll ?)

Vient ensuite l'utilisation de cette lib compilé (1560Ko quand même). J'écris le code simpliste suivant :

#include <curl/curl.h>
#include <stdio.h>

int main(int argc, char **argv)
{
CURL *session = curl_easy_init();

curl_easy_cleanup(session);
return 0;
}

Et j'ai des erreurs de link :

1>main.obj : error LNK2019: symbole externe non résolu __imp__curl_easy_cleanup référencé dans la fonction _main
1>main.obj : error LNK2019: symbole externe non résolu __imp__curl_easy_init référencé dans la fonction _main

J'essaie alors plusieurs choses :

1/ Ajout de la ligne #pragma comment (lib, "curllib.lib")
2/ Ajout de 'Extern "C"' autour de l'include de curl.h
3/ L'ajout de la lib dans les propriétés du projet
... Sans succès.

Merci d'avance pour votre aide.
OS : WinXP SP2
IDE/Compilo : Visual studio 2008


Tibabou

11 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Déjà, es-tu sûr que c'est une dll qui doit être créée, et pas une librairie statique? Y-a-t'il des messages d'erreurs/warnings lors de la compilation?
Il faut effectivement toujours lier à la librairie pour l'utiliser, soit avec #pragma comment, soit dans les propriétés, et ceci pour une dll ou une lib simple.
As-tu placé la lib dans le répertoire du projet utilisateur, ou indiqué son chemin d'accès à VS? Sinon, il ne la trouvera pas si tu te contentes de mettre #pragma comment (lib, "curllib.lib").
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Salut juju12.
Pas d'erreur à la compil de la lib. Mettons de coté la génération de la dll car pour le moment c'est la lib statique qui m'intéresse.

J'ai placé le curllib dans le dossier lib de vs. J'ai aussi mis le dossier curl (avec les différents headers) dans le dossier include de vs.

Si je change le nom de la lib dans mon pragma, une autre erreur s'affiche pour dire qu'il ne trouve pas le fichier. J'en déduis que vs trouve bien le curllib.lib.

A part les pb de links, vs n'affiche aucune erreur.

Merci pour ton aide.

Tibabou
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Un admin peut-il déplacer ce topic dans la rubrique windows svp ? Désolé pour l'erreur.

Tibabou
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Bon, j'ai téléchargé les sources pour voir.
Déjà, il y a un certain nombre de configurations de compilation (la combobox à côté du bouton 'Start debugging') disponibles dans le projet, notamment Dll Release et Lib Release. Les as-tu également?
La compilation est OK et me donne bien, dans le premier cas, la dll, qui est générée dans le dossier Dll-Release, puis projet test OK.
Par contre en mode Lib Release, il y a bien erreur de linkage par la suite... plutôt bizarre.

Cela dit, si tu te contentes de fonctionner avec la dll y aura pas de problème.
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Merci d'avoir pris le temps de tester chez toi juju12.
VS me crée un dossier "Debug" ou "Release" selon le mode de compilation que je choisis. Dans les 2 cas, je ne trouve qu'un *.lib.

Si quelqu'un a le curllib.lib qui fonctionne, pourriez-vous me l'envoyer ?
Ainsi, je saurais si c'est ma compilation de curl qui plante ou bien si c'est le link dans mon programme.



Tibabou
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
J'ai plus d'options que ça moi... as-tu la même version de curl (7.19.6)?
j'ai ouvert le fichier vc6curl.dsw dans le répertoire parent (il contient à la fois les projets curl et libcurl), puis, après conversion au format VS2008, j'ai le choix pour la compilation entre :

Dll debug
Dll Release
LIB Debug
LIB Release
using libcurl Dll debug
using libcurl Dll Release
using libcurl LIB Debug
using libcurl LIB Release
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

J'avais la version 7.16, je viens de prendre la 7.19.6 et j'ai en effet plusieurs configs possibles.
En debug ou release, la lib n'arrive toujours pas à être linkée.

Avec ou sans la dépendance que j'ajoute, cela ne change rien. Je fais :

Projet -> Propriétés de monProjet
Propriétés de configuration -> Editeur de liens -> Entrées
Dépendances supplémentaires : libcurl.lib

Exactement le même problème dans visual c++ 6.
Je sais pas linker ou quoi ?

Tibabou
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Bon, ça avance.

J'ai ajouté "-DCURL_STATICLIB" dans les directives du préprocesseur. J'obtiens les erreurs suivantes :

1>Édition des liens en cours...
1>LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRT' et les autres bibliothèques ; utilisez /NODEFAULTLIB:library
1>libcurl.lib(curl_addrinfo.obj) : error LNK2019: symbole externe non résolu __imp__freeaddrinfo@4 référencé dans la fonction _Curl_getaddrinfo_ex
1>libcurl.lib(curl_addrinfo.obj) : error LNK2019: symbole externe non résolu __imp__getaddrinfo@16 référencé dans la fonction _Curl_getaddrinfo_ex
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_unbind_s référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_msgfree référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_next_entry référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ber_free référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_next_attribute référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_memfree référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_value_free_len référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_get_values_len référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_first_attribute référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_get_dn référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_first_entry référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_search_s référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_simple_bind_s référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_init référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_set_option référencé dans la fonction _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: symbole externe non résolu __imp__ldap_err2string référencé dans la fonction _Curl_ldap
1>D:\Mes documents\Visual Studio 2008\Projects\curl\Debug\curl.exe : fatal error LNK1120: 18 externes non résolus


Quel est le pb avec ldap ?
Merci.

Tibabou
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Quand y'en a plus y'en a encore...

J'ai corrigé les erreurs LDAP par l'ajout de la dll WLDAP32.LIB. Les erreurs pour lesquelles je ne trouve aucune info sont les suivantes :

1>Édition des liens en cours...
1>libcurl.lib(curl_addrinfo.obj) : error LNK2019: symbole externe non résolu __imp__freeaddrinfo@4 référencé dans la fonction _Curl_getaddrinfo_ex
1>libcurl.lib(curl_addrinfo.obj) : error LNK2019: symbole externe non résolu __imp__getaddrinfo@16 référencé dans la fonction _Curl_getaddrinfo_ex
1>D:\Mes documents\Visual Studio 2008\Projects\curl\Debug\curl.exe : fatal error LNK1120: 2 externes non résolus


Tibabou
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

UP please. Je ne m'en sors pas.
Pire, quand j'essaie de passer en "DLL release", j'obtiens ça :

1> Création de la bibliothèque DLL-Release/libcurl_imp.lib et de l'objet DLL-Release/libcurl_imp.exp
1>curl_addrinfo.obj : error LNK2019: symbole externe non résolu __imp__freeaddrinfo@4 référencé dans la fonction _Curl_getaddrinfo_ex
1>curl_addrinfo.obj : error LNK2019: symbole externe non résolu __imp__getaddrinfo@16 référencé dans la fonction _Curl_getaddrinfo_ex
1>url.obj : error LNK2001: symbole externe non résolu _Curl_handler_ldap
1>DLL-Release/libcurl.dll : fatal error LNK1120: 3 externes non résolus

A ceux qui ont déjà compilé libcurl sur XP, merci de me donner un coup de main, je rame...

Tibabou
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012

Up please.
Je n'arrive pas à trouver d'aide sur internet.

Merci.

Tibabou