Lier des problèmes en utilisant libcurl avec Visual C ++ 2005: « symbole externe non résolu __imp__curl_easy_setopt »

StackOverflow https://stackoverflow.com/questions/2407442

  •  18-09-2019
  •  | 
  •  

Question

Je prévois d'utiliser libcurl dans mon projet. J'avais téléchargé la source de la bibliothèque, construite et intégrée dans une petite application de POC. Je suis en mesure de construire et exécuter l'application sans aucun problème avec le libcurl.dll généré et les fichiers libcurl_imp.lib. Maintenant, quand j'intègre la même bibliothèque dans mon projet, je reçois des erreurs de l'éditeur de liens.

6> foo.obj: erreur LNK2001: symbole externe non résolu __imp__curl_easy_setopt

6> foo.obj: erreur LNK2001: symbole externe non résolu __imp__curl_easy_perform

6> foo.obj: erreur LNK2001: symbole externe non résolu __imp__curl_easy_cleanup

6> foo.obj: erreur LNK2001: symbole externe non résolu __imp__curl_global_init

6> foo.obj: erreur LNK2001: symbole externe non résolu __imp__curl_easy_init

J'ai fait des recherches et a essayé toutes sortes de solutions de contournement comme l'ajout CURL_STATICLIB définitions, bibliothèques supplémentaires , changer à / MT copie même la libs dans le répertoire de sortie, mais rien ne semble fonctionner. Pour autant que je peux voir la seule différence entre l'approche # 1 et # 2 dans mes étapes sont n ° 1 est une application console en utilisant le libcurl.dll alors que dans mon projet principal ceci est une autre dll qui tente de créer un lien vers libcurl.dll. . Est-ce que tout changement nécessiterait approche? Puis-je utiliser le même fichier DLL / MD multithread généré pour les deux (Essayé / MT également sans succès)? D'autres idées?

Après les options de l'éditeur de liens.

----------------------------------------------- --Travail----------------------------------------------- -

/ OUT: "C: \ SampleFTP \ Release \ SampleFTP.exe" / INCREMENTAL: NO / NOLOGO / LIBPATH: "C: \ SampleFTP \ SampleFTP \ Release" / MANIFESTE /MANIFESTFILE:"Release\SampleFTP.exe.intermediate.manifest » / DEBUG /PDB:"c:\SampleFTP\release\SampleFTP.pdb » / SUBSYSTEM: CONSOLE / OPT: REF / OPT: ICF / LTCG / MACHINE: X86 / ErrorReport: PROMPT libcurl_imp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib Ole32.lib oleaut32.lib Uuid.lib odbc32.lib odbccp32.lib

----------------------------------------------- --Travail----------------------------------------------- -

---------------------------------------------- NotWorking -------------------------------------------------

/ OUT: "....... \ nt \ win32 \ Release / foo__tests.dll" / INCREMENTAL: NO / NOLOGO / LIBPATH: "C: \ FullLibPath \ libcurl_libs" /LIBPATH:"......\nt\Win32\Release » / DLL / MANIFESTE /MANIFESTFILE:".\foo__tests\Win32\Release\foo__tests.dll.intermediate.manifest "/ DEBUG /PDB:".......\nt\Win32\Release/foo_tests.pdb" / OPT: REF / OPT: ICF / LTCG /IMPLIB:".......\nt\Win32\Release/foo_tests.lib » / MACHINE: X86 / ErrorReport: PROMPT odbc32.lib odbccp32.lib util_process.lib WSOCK32.LIB Version.lib libcurl_imp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib Ole32.lib oleaut32.lib Uuid.lib odbc32. lib odbccp32.lib "...... \ nt \ win32 \ release \ otherlib1.lib" "...... \ nt \ win32 \ release \ otherlib2.lib"

---------------------------------------------- NotWorking -------------------------------------------------

Était-ce utile?

La solution 2

Ok ... Ce embrassing .... j'avais réussi à résoudre le problème et comme vous pouvez le deviner, il n'a rien à voir avec libcurl..Basically le fichier qui est un lien vers libcurl fait partie de plusieurs projets. Ainsi, alors que je l'ai défini correctement les libs dans le premier projet, je n'ai pas dans le others..And le journal de la construction montre les projets (succès / messages d'échec) l'un après l'autre et je pouvais remarquer le problème que tout en passant par togeather avec mon haut ... dans l'ensemble une expérience humiliante ..

Leçon apprise (pour les futurs visiteurs ici) serait - libcURL est un produit mature et il est peu probable berceau pour base bottelage - La seule chose nécessaire si vous allez utiliser Windows .dll serait 1) Télécharger la source. Ouvrir le fichier de soln. Construire (comme dll de libération). 2) Inclut le chemin d'en-tête supplémentaire pour les bibliothèques curl. 3) Inclure fichier .lib comme une dépendance tout en liant. 4) Commencez à faire des appels de Flexion (y compris les en-têtes curl utres dans la source)

et vous devriez être bon d'aller. Pour le démarrage de (autre que l'excellent référentiel à la page d'accueil) Je Fount un bon tutoriel ici ...

http://www.luckyspin.org/?p=28

Autres conseils

avez-vous exécutez les commandes

curl-config --cflags
curl-config --libs

Avec les résultats de --libs je pourrais trouver comment lier ma demande.

Je suis d'accord à user88595. , On peut en plus besoin de regarder les choses suivantes (hors de l'expérience).

Ceci est si vous avez une bibliothèque partagée dans votre projet:

Disons que vous avez une solution Visual Studio « A » est un projet de bibliothèque partagée « B » est le projet exécutable cible (la plupart des cas, le projet de démarrage).     Donc, vous devez vraiment voir qui appelle effectivement l'API de libcurl.lib de, ce qu'ils sont appelés dans les « A », vous devez aller à la propriété « bibliothécaire » du projet « A », puis ajoutez libcurl.lib y dépendance. , Ajoutez également les chemins lib. Je l'avais fait une erreur d'ajouter la dépendance à la propriété « linker » et les chemins lib à « B », qui a causé ce même problème.

Certaines erreurs de l'éditeur de liens supplémentaires w.r.t LDAP:

Une fois que vous résolvez les erreurs de l'éditeur de liens mentionnés dans cette section, vous obtiendrez des erreurs plus par rapport à LDAP, pour résoudre ce Wldap32.lib ajouter sous la dépendance de liaison de « B ».

Tous les meilleurs, Arjun

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top