2010-10-24 34 views
3

J'essaie d'utiliser libcurl avec un programme que je suis en train de faire, mais j'ai quelques problèmes avec ça. Jusqu'à présent, j'ai seulement essayé les exemples du site Web de libcurl, mais ils se plantent dès que le programme arrive à l'initialisation curl.C++: Libcurl curl_easy_init() donne une erreur de violation d'accès et bloque le programme

Mon code actuel:

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

int main(int argc, char *argv[]) 
{ 
    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if(curl) 
    { 
     curl_easy_setopt(curl, CURLOPT_URL, "http://garrysmod.fi/"); 
     res = curl_easy_perform(curl); 

     curl_easy_cleanup(curl); 
    } 

    return 0; 
} 

J'ai aussi fait que le compilateur et éditeur de liens peuvent trouver les ressources, et que le fichier dll (de libcurl.dll) est dans le dossier du programme, mais il se bloque. J'ai essayé le débogage avec VS2010, et il m'a donné une erreur "violation d'accès" à la fonction d'initialisation curl_easy_init().

Toute aide serait appréciée!

Répondre

2

Ceci est presque certainement une discordance de DLL. Tout d'abord, vérifiez votre PATH pour toutes les versions plus anciennes ou différentes de libcurl.dll.

Je viens de construire votre extrait en utilisant VS2010 professionnel contre cette version pour MSVC 7.18.0/Win32 generic et cela a bien fonctionné.

+0

Merci! J'utilisais la version Win32 Generic de libcurl au lieu de Win32 MSVC. Le programme a également donné un message d'erreur à propos de zlib plus tard, mais cela a été résolu en téléchargeant et en mettant zlib1.dll dans le dossier du programme. – Dragory

+0

Excellentes nouvelles; Voilà à quoi cela ressemblait à moi. Pour référence future, je construirai généralement contre une version statique de lib si disponible pour trouver des problèmes provoqués par DLL enfer. Je livre souvent du code en utilisant des bibliothèques statiques pour éviter les problèmes de DLL. La taille supplémentaire de l'exe vaut l'amélioration de la fiabilité. –

0

Vous pouvez essayer d'exécuter le programme dans la compilation de version et voir si cela fonctionne sans erreur. J'ai remarqué qu'avec quelques librairies Open Source que j'ai utilisées sous Windows, si vous liez la version debug avec la version release de la librairie OS, les choses ne fonctionnent pas bien. J'ai généralement défini ensuite les options du compilateur à lier à la version de débogage de la bibliothèque dans la version de débogage et à la version finale de la bibliothèque dans la version finale.

Je n'ai jamais pris la peine de savoir pourquoi cela se produisait, malheureusement. C'est quelque chose à essayer.

+0

Bon point, qui a travaillé pour moi avant aussi. Ne semble pas dans ce cas, cependant. Merci pour la réponse, de toute façon. – Dragory

1

programme compilé ok sur ma machine (boîte de ubuntu):

#g++ -lcurl url.c -o url

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>Garry's Mod Finland - Etusivu</title> 
    <meta h ....