Dodawanie statycznego libcurla do kodu:: Blocks IDE

Nie mogę zrozumieć, jak poprawnie dodać statyczną bibliotekę libcurl do mojego kodu:: Blocks IDE. Chcę, żeby było statyczne, bo wtedy nie .pliki dll, które domyślnie nie są zawarte w systemie Windows, są potrzebne podczas wykonywania mojego programu. Używam tego libcurla: http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=- (minGW bez OpenSSL)

Oto moje globalne ustawienia kompilatora: http://img845.imageshack.us/img845/1381/halpr.jpg

Otrzymuję następujące błąd:

Ld.exe / / cannot find-lCURL_STATICLIB / / / = = = budowa zakończona: 1 błędy, 0 Ostrzeżenia = = = /

Podczas kompilacji tego kodu:

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;
}

Oczywiście nie znajduje CURL_STATICLIB, nie mam pojęcia dlaczego. Nie jestem nawet pewien, czy trzeba było dodać CURL_STATICLIB do moich ustawień linkera (czytałem to na innych forach). Znalazłem kilku facetów mających ten sam problem, ale nie jest poprawnie odpowiedział w żadnym miejscu:

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

Jestem tak zmęczony walką z tym, proszę, pomóż mi.

EDIT:

Witaj Wiktorze, dziękuję za odpowiedź!

Postaram się być jak najbardziej szczegółowy, więc nie ma missunderstandings. Oto obraz drzewa katalogów / folderów dla mojego C:\libs \ folder:

Http://img199.imageshack.us/img199/6977/curl1.png

Jak widać, zawiera również dziennik budowy, zauważysz, że tym razem błąd jest inny niż ten, który zamieściłem wcześniej. To dlatego, że zmieniłem ustawienia globalnego kompilatora i budowania projektu.

Moje nowe ustawienia projektu: http://img863.imageshack.us/img863/4404/buildoptions.png Mój nowy Globalne ustawienia kompilatora: http://img225.imageshack.us/img225/4926/curl2.png

Jestem pewien, że źle skonfigurowałem te ustawienia i dlatego nie mogę go skompilować.

Author: Javatar, 2011-06-05

1 answers

OK, udało mi się zbudować twój przykład z powodzeniem z libcurl używając statycznego powiązania. Szczegóły związane z tą pracą są dość skomplikowane - prawidłowe ustawienie może być trudne dla nieostrożnych.

Oto kroki, których użyłem, aby to zadziałało, pamiętaj, aby postępować zgodnie z nimi uważnie:

  1. Przejdź do opcje budowania projektu- > Ustawienia kompilatora - > # definiuje: Wpisz CURL_STATICLIB. Gdy jest to zdefiniowane libcurl.nagłówek H będzie miał wstępnie przetworzone sygnatury funkcji aby dopasować statyczne połączenie. W przeciwnym razie przyjmuje się dynamiczne powiązanie i zniekształcone nazwy stają się _imp__*. Nierozwiązane błędy z zrzutu ekranu wskazują, że próbowano użyć łącza dynamicznego, a nie żądanego łącza statycznego.

  2. Pod opcje budowania projektu- > Ustawienia linkera - > Biblioteki linków upewnij się, że zawiera on następujące elementy: curl, rtmp, idn, ssl, SSH2, crypto, z, ws2_32, wldap32, winmm, gdi32. Pamiętaj, że kolejność jest ważna. Ze względu na konstrukcję niedobór linkera gnu, biblioteki najbardziej zależne muszą być wymienione jako pierwsze, a następnie jako least dependant. Inne linkery, takie jak msvc link i borland ' s ilinker nie wykazują takich problemów-biblioteki mogą być wymienione w dowolnej kolejności.

  3. Pod opcje budowania projektu->Ustawienia linkera - > inne opcje linkera dodaj '- static'. Zapewni to, że zostanie użyta statyczna wersja 'idn'. Jeśli ten przełącznik zostanie pominięty, skompilowany program może zależeć od "libidn-11.dll ' do uruchomienia, co prawdopodobnie nie jest tym, czego chcesz.

W tym momencie powinieneś być w stanie kompilować i łączyć programy libcurl bez żadnych problemów. Kilka rzeczy, o których warto wspomnieć,

  • Pod inne opcje linkera inne dodatkowe przełączniki z zrzutu ekranu nie są potrzebne. "libcurl.a ' jest już wymienione i objęte Biblioteki linków .

  • "libcrypto.a ' wydaje się obejmować te same odniesienia, co "libeay32.a ' więc tylko jeden z nich jest potrzebny. Jednak " libeay32.a ' powoduje dynamiczne połączenie pomimo jego większych rozmiarów. Jeśli chcesz, aby Twoja aplikacja była "w pełni autonomiczna" użyj libcrypto.a ' zamiast jak na zrzucie ekranu.

  • Jeśli chcesz w przyszłości łączyć się dynamicznie, po prostu zamień listę na 'curldll' w Biblioteki linków i usuń CURL_STATICLIB definiowanie. Dodatkowe biblioteki (np. ssl, idn, rtmp itp.) nie są potrzebne od czasu libcurl.dll już obejmuje oni.

  • Możesz uniknąć żmudnej, podatnej na błędy konfiguracji nowego programu libcurl, wykorzystując szablony użytkowników codeblocks. (np. Plik - > Nowy - > Projekt - > szablony użytkowników)

Mam nadzieję, że to rozwiąże wszystkie problemy z kompilacją libcurl raz na zawsze.

 21
Author: greatwolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-09 02:08:09