L'ajout de statique libcurl pour Code::Blocks IDE
Je ne peux pas comprendre comment ajouter une statique de la librairie libcurl pour mon Code::Blocks IDE. Je veux statiques, car alors aucun .dll fichiers, qui ne sont pas inclus dans Windows par défaut, sont nécessaires au cours de l'exécution de mon programme. Je me sers de ce libcurl:
http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=- (minGW sans OpenSSL)
Voici mon global compiler settings: http://img845.imageshack.us/img845/1381/halpr.jpg
J'obtiens l'erreur suivante:
ld.exe||cannot find-lCURL_STATICLIB| ||=== Build finished: 1 errors, 0 avertissements ===|
lors de la compilation de ce code:
include <stdio.h>
include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
Évidemment, il ne trouve pas CURL_STATICLIB, jeudi j'ai aucune idée pourquoi. Je ne suis même pas sûr si elle était nécessaire pour ajouter CURL_STATICLIB à mon linker settings(je l'ai lu sur d'autres forums). J'ai trouvé des gars ayant le même problème, mais il n'est pas correctement répondu sur n'importe quel endroit:
stackoverflow.com/questions/4176503/frustrated-with-libcurl
forums.codeblocks.org/index.php?topic=11391.0
old.nabble.com/gcc-working-with-libcurl-td20506927.html
forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html
Je suis tellement fatigué de se battre avec cela, s'il vous plaît aider moi.
EDIT:
Bonjour Victor, merci pour la réponse!
Je vais essayer d'être aussi détaillé que possible, donc il n'y a pas missunderstandings.
Alors, voici l'image du répertoire/dossier de l'arbre pour mon C:\libs\ dossier:
http://img199.imageshack.us/img199/6977/curl1.png
Comme vous pouvez le voir, il comprend également des journaux de construction, vous remarquerez que l'erreur cette fois est
différent de celui que j'ai posté précédemment. C'est parce que j'ai changé global compiler et construire des paramètres du projet.
Mon Projet de construction d'paramètres: http://img863.imageshack.us/img863/4404/buildoptions.png
Mon nouveau Global compiler settings: http://img225.imageshack.us/img225/4926/curl2.png
Je suis sûr d'avoir configuré ces paramètres mal et c'est pourquoi je ne peux pas le compiler.
Comment avez-vous "installer" la libcurl fichiers? Vous venez de vous faire un nouveau répertoire et copier le répertoire " lib " et inclure les dossiers et puis de dire codeblocks à voir là-bas? Je suis en train d'essayer de résoudre le problème moi-même. Merci! 🙂
OriginalL'auteur Javatar | 2011-06-05
Vous devez vous connecter pour publier un commentaire.
Bon, j'ai réussi à construire votre exemple avec succès avec libcurl l'aide d'une liaison statique. Les détails sont impliqués pour faire de ce travail sont assez complexes -- configurer correctement peut être délicat pour les imprudents.
Voici les étapes que j'ai utilisé pour faire ce travail, assurez-vous de suivre attentivement:
Aller à Projet build options->compiler settings->#définit: type de
CURL_STATICLIB
. Lorsque cela est défini par la libcurl.h en-tête aura ses signatures de fonction prétraitées pour s'adapter à une liaison statique. Sinon, la liaison dynamique est pris en charge et les noms déformés deviennent alors_imp__*
. La non-résolution des erreurs de votre capture d'écran indiquent qu'il tente un lien dynamique plutôt que la densité de lien statique.Sous Projet build options->Linker settings->Lien bibliothèques assurez-vous qu'il contient les éléments suivants: curl, rtmp, idn, ssl, ssh2, crypto, z, ws2_32, wldap32, winmm, gdi32. Notez que l'ordre est important. En raison d'une conception de la carence de l'éditeur de liens gnu, les plus dépendants les bibliothèques doivent être listés en premier, suivis par au moins une personne à charge. D'autres linkers comme msvc lien et de borland ilinker ne présentent pas de tels problèmes, les bibliothèques peuvent être énumérés dans un ordre quelconque.
Sous Projet build options->Linker settings->Autres options du linker ajouter dans 'statique'. Ce sera assurez-vous que la version statique de la " idn " est utilisé. Si ce paramètre est omis, alors votre programme compilé pourraient dépendre de l' 'libidn-11.dll pour exécuter ce qui n'est probablement pas ce que vous voulez.
À ce stade, vous devriez être en mesure de compiler et lier libcurl programmes sans aucun problème. Un couple de choses la peine de mentionner,
Sous Autres options du linker les autres commutateurs supplémentaires à partir de votre capture d'écran ne sont pas nécessaires. 'libcurl.a' est déjà inscrites et qui sont couverts par bibliothèques de liens.
Le " libcrypto.une "semble couvrir les mêmes références que le" libeay32.un " si un seul d'entre eux est nécessaire. Cependant, " libeay32.un " provoque la liaison dynamique malgré sa taille plus grande. Si vous souhaitez que votre application d'être "autonome" utilisation " libcrypto.un " au lieu de cela, comme dans la capture d'écran.
Si vous souhaitez lier dynamiquement dans l'avenir, il suffit de remplacer la liste avec 'curldll" sous bibliothèques de liens et retirer le
CURL_STATICLIB
définir. Les bibliothèques supplémentaires (par exemple. ssl, idn, rtmp, etc.) ne sont pas nécessaires puisque libcurl.dll couvre déjà.Vous pouvez éviter la fastidieuse sujettes à erreur d'installation d'un nouveau libcurl programme en employant codeblocks' modèles de l'utilisateur. (eg. Fichier->New->Projet->modèles de l'Utilisateur)
J'espère que cela résout tous les problèmes de compilation que vous avez avec libcurl une fois pour toutes.
Les liens à partir de votre question, a fourni un bon point de départ, mais beaucoup ont été à partir de l'expérience de l'utilisation des outils et de l'essai-et-erreur. Mingw est livré avec 'nm' & 'objdump' ont été très utiles -- ils vous permettent d'inspecter exactement ce qui est dans le fichier de la bibliothèque en question(d'autres compilateurs ont leur propre version de "objdump'). Combinez cela avec 'grep' ('findstr" sous windows fonctionne aussi) et vous pouvez trouver d'où une fonction spécifique ou un ensemble de données réside(ou si elle existe même en premier lieu). L'inspection de libcurl.h a également fourni des indications utiles. Et bien sûr, le bon vieux MSDN.
rtmp de la bibliothèque n'est pas pertinent pour des raisons juridiques (DMCA), longue histoire courte, il est possible de lier statiquement libcurl, il ne gère pas le protocole rtmp:// url. J'ai moi-même n'ai pas besoin ni de l'idn de la bibliothèque j'ai donc fini par retirer les deux et cela a fonctionné. Mega bravo aux gens de piratage de ces bibliothèques derrière Cygwin, et de vous fournir une explication détaillée sur la façon de le faire.
OriginalL'auteur greatwolf