2013-09-23 10 views
6

curently Mam zainstalowany w moim systemie qt-windows-opensource-5.1.1-msvc2012-x86_64-nieaktywnyJak korzystać libCurl na Qt Creator z MSVC2012 jak Compiler

Wszystko działa dobrze, ale ja nie mogę naprawdę succed używać libCurl w moim projekcie Qt.

Pobrałem tę wersję libcurl: http://curl.haxx.se/download/libcurl-7.19.3-win32-ssl-msvc.zip

MSVC metalink 7.19.3 devel SSL   Frederic Elbin 4.04 MB 

I zostały przeniesione to folder z archiwum do VC to folder i podaję w programie z #include i działa dobrze.

Teraz w folderze lib znajdują się kolejne dwa foldery z nazwami: Debug and Release i oba mają w sobie kilka plików.

Na moim .pro pliku dodałem:

win32: LIBS += -L$$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc/ -llibcurl_imp 

INCLUDEPATH += $$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc 
DEPENDPATH += $$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc 

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc/lib/release/ -lcurllib 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc/lib/debug/ -lcurllib 

INCLUDEPATH += $$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc/lib/Debug 
DEPENDPATH += $$PWD/../../../../../libcurl-7.19.3-win32-ssl-msvc/lib/Debug 

a teraz gdy próbuję uruchomić prosty program uzyskałem:

mainwindow.obj:-1: error: LNK2019: unresolved external symbol __imp_curl_easy_init referenced in function "private: void __cdecl MainWindow::on_pushButton_clicked(void)" ([email protected]@@AEAAXXZ) 

Na pobranego archiwum są bardziej inne pliki też: http://img13.imageshack.us/img13/1416/reh8.png

Prawdopodobnie teraz włączam libs fine (wewnętrzne/zewnętrzne lub dynamiczne/statyczne) i nie wiem, który z nich dołączyć i jak. Jest też trochę plików .dll, z których nie wiem, co robić.

Czy ktoś z powodzeniem użył libcurl w projektach Qt? Jestem początkujący w Qt i jest to dla mnie trudne ...

Dzięki.

+0

czy możesz pokazać nam kompilację i powiązanie poleceń qt creator podczas tworzenia twojego projektu? powinny być w panelu wyjściowym kompilacji –

+0

Nie wiem na pewno, gdzie mogę uzyskać kompilację i polecenia łączenia? – caffeine

+0

naciśnij alt + 4, a okno wyjściowe kompilacji powinno pojawić się, qt creator pokazuje polecenia, których używa do kompilacji kodu źródłowego, możesz mieć ten problem, ponieważ wydaje błędne komendy kompilacji. Możesz również uzyskać ten problem, jeśli lib, którego próbujesz użyć, jest skompilowany dla 64 bitów i używasz go w projekcie 32-bitowym lub odwrotnie.I na koniec, możesz także znaleźć ten problem, jeśli kompilujesz z innym kompilatorem, niż twórcy curl używali do kompilacji biblioteki lib –

Odpowiedz

2

Mogę powiedzieć, w jaki sposób używam libCurl w QT. Jeśli ktoś ponownie natknie się na to pytanie. Ale używam wersji mingw, więc może być inaczej.

W .pro pliku:

INCLUDEPATH += C:\Users\pagep\QT\curl-7.31.0-devel-mingw32\include 
LIBS += C:\Users\pagep\QT\curl-7.31.0-devel-mingw32\lib\libcurldll.a 

A w folderze "debug" (folder, w którym program jest wykonywany) Dodałem pliki .dll z folderu curl-7.31.0-devel-mingw32 \ bin

libcurl.dll 
libeay32.dll 
libidn-11.dll 
librtmp.dll 
libssh2.dll 
ssleay32.dll 
zlib1.dll 

To chyba nie jest najlepsze rozwiązanie, ale działa dla mnie. :)

+0

Zainstalowałem QtSDK + MinGw i problem nadal występuje. Otrzymuję teraz ten błąd: "error: undefined reference to" _imp__curl_easy_init "" – caffeine

+0

Myślę, że wiem, gdzie jest problem. Na oficjalnej stronie pobierania Qt + MinGw są dostępne tylko na x86, a libCURL jest dostępny dla MinGw tylko na x64. Tak więc, myślę, że muszę pobrać i skompilować źródło libCURL jako x86. @pagep: czy możesz dać mi swój folder libcurl jako archiwum? Lub powiedział mi proszę, jakiej wersji Qt używasz? – caffeine

+0

Rozwiązany. Pobrałem za każdym razem błędną wersję z oficjalnej strony libcurl. To jest dobra wersja http://curl.haxx.se/gknw.net/7.34.0/dist-w32/curl-7.34.0-devel-mingw32.zip – caffeine

2

To nie może być odpowiedź na twoje pytanie, ale polecam używanie klasy QNetworkAccessManager zamiast libcurl. Z tą klasą możesz zrobić prawie wszystko, co możesz zrobić używając libcurl. Twój kod będzie prostszy i bardziej przejrzysty. Niektóre sławne, w pełni funkcjonalne menedżery pobierania oparte na Qt używają tej klasy.

+0

Tak, rozumiem, że jest bardziej natywny w użyciu QNetworkAccessManager. Ale jest mi łatwo używać curl, wcześniej używałam curl w PHP i nie ma dużej różnicy między php curl i libcurl. Chcę użyć tego na Qt i nauczyć się dodawać biblioteki do mojego projektu qt, a libcurl jest najlepszym przykładem. – caffeine

+0

QNetworkAccessManager jest asynchroniczny tylko dla aktualnej wersji QT 5.6, wiele osób będzie potrzebowało wersji synchronicznej. –

+0

@RaidenCore Sync wersja będzie blokować twój interfejs użytkownika, dlatego została wykonana asynchronicznie w Qt v4.7 –