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

cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012 - 12 août 2009 à 18:38
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012 - 17 août 2009 à 11:42
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

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
12 août 2009 à 19:48
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").
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
12 août 2009 à 21:14
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
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
13 août 2009 à 10:26
Un admin peut-il déplacer ce topic dans la rubrique windows svp ? Désolé pour l'erreur.

Tibabou
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 août 2009 à 10:43
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
13 août 2009 à 12:58
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
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 août 2009 à 16:05
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
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
13 août 2009 à 21:11
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
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
13 août 2009 à 21:33
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
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
13 août 2009 à 21:42
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
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
14 août 2009 à 19:28
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
0
cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012
17 août 2009 à 11:42
Up please.
Je n'arrive pas à trouver d'aide sur internet.

Merci.

Tibabou
0
Rejoignez-nous