Kompilacja programu korzystającego z curl poprzez gcc - jak?

0

Rozpakowałem curl-a i za pomocą polecenia

gcc democurl.c -o democurl -LC:\libcurl-7.19.3-win32-ssl-msvc\lib\Release -IC:\libcurl-7.19.3-win32-ssl-msvc\include

spróbowałem skompilować przykładowy program:

#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://example.com");
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    res = curl_easy_perform(curl);
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));
     curl_easy_cleanup(curl);
  }
  return 0;
} 

Wyskakuje szereg błędów wskazujących, że błąd jest w bibliotece.

In file included from democurl.c
C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h parse error before curl_socket_t' C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h:125: warning: data definition has no type or storage class C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h:210: parse error before curl_socket_t'
C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h parse error before *' C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h:226: curl_socket_t' declared as function returning a function
C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h curl_socket_t' redeclared as different kind of symbol C:\libcurl-7.19.3-win32-ssl-msvc\include\curl/curl.h:125: previous declaration of curl_socket_t'

Znając życie znowu zrobiłem coś nie tak. Co mam zrobić by działało?

1

Zobacz:

gcc democurl.c -o democurl -LC:\libcurl-7.19.3-win32-ssl-msvc\lib\Release -IC:\libcurl-7.19.3-win32-ssl-msvc\include

Nie ma wersji dla gcc? Albo kompiluj za pomocą msvc.

0

Kierowałem się tym wpisem:

http://thinkminus.wordpress.com/2010/05/18/compile-c-code-that-uses-libraries-using-gcc-on-windows/

Autor uważa, że jest to możliwe. Niemniej wyleczono mnie dziś z używania rozwiązań z Linuxa pod Windows i przesiadłem się na Code::Blocks.
Tam dołączenie curl-a jest bajecznie proste.

0

Po 1. Gdyby działało to co jest tam napisane to nie zakładałbym tematu. Wystarczy przejrzeć co jest tam napisane by zorientować się, że w pierwszym poście opisałem dokładnie to samo. I nie działało. Przyjmuję do wiadomości, że wersja msvc nie działa z gcc, a autor tamtego bloga napisał bzdury.
Po 2. Tak, "przesiadłem się" na gcc schowane w Code::Blocks. Nie ma sensu bawić się we własnoręczne tworzenie makefile'ów, kompilowanie z linii poleceń itd. gdy są środowiska takie jak C::B.

Mam nadzieję, że następnym razem spotkam się z pomocą, a nie bezwartościowym wytykaniem niewiedzy.

W Code::Blocks da się używać libcurl w następujący sposób:

  1. Na stronie
    http://curl.haxx.se/
    użyć Download Wizard i wybrać libcurl -> Windows -> Generic. Pobrać wskazany pakiet. Na dzisiaj jest to:
    http://curl.haxx.se/gknw.net/7.29.0/dist-w32/curl-7.29.0-devel-mingw32.zip
  2. Z archiwum wypakować katalog include i skopiować go do katalogu [Projekt] ([Projekt]/include).
  3. Z archiwum wypakować katalog lib i skopiować go do katalogu [Projekt] ([Projekt]/lib).
  4. W Code::Blocks po otwarciu projektu (w języku C) w oknie Projects-> Build Options na liście po lewej wskazać nazwę projektu (nie Release i nie Debug), przejść do zakładki Search directories i w zakładce Compiler dodać wypakowany katalog include. W zakładce Link Libraries wskazać pliki z katalogu lib. Nie ma znaczenia czy ścieżki będą względne czy bezwzględne.
  5. Zamknąć okno Project build options i z menu wybrać Build -> Build and run.
  6. Program się skompiluje, ale się wysypie. Do katalogu ze skompilowanym programem [Projekt]/bin/Debug (później również Release) przekopiować biblioteki dll umieszczone w pobranym archiwum w katalogu bin.
  7. Uruchomić program. Będzie działał.

gcc faktycznie pracuje tylko z plikami z rozszerzeniem a, ale już skompilowany program wymaga dll-i.

Cieszę się, że mogłem sobie pomóc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1