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ć.
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:
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.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.
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.
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