Problem bei der nutzung von Libcurl
-
Hallo,
ich versuche ein kleines Programm zu erstellen welches per httpS ein Postrequest sendet und die antwort dann ausgibt.nach viel Sucherei zum thema hab ich die libcurl entdeckt.
Nun wollte ich diese benutzen, ich habe mir dazu das binary der lib runtergeladen.
und in meiner IDE Code::Blocks eingbaut
Ich habe in den Serach Directoris im compiler part c:\curl-7.30.0\include
und im linker part: c:\curl-7.30.0\lib eingetragenin den Linker setting habe ich folgendes eingeragen:
C: \boost_1_53_0\stage\lib\*
C: \curl-7.30.0\lib\libcurl.a
C: \curl-7.30.0\lib\libssl.a
C: \GnuWin32\lib\libz.a
C: \MinGW\lib\libwldap32.a
C: \MinGW\lib\libws2_32.a
C: \MinGW\lib\libwinmm.a
C: \MinGW\lib\libgdi32.ader Compiler gibt mir bei einen test programm:
#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; }
dieses hier aus:
-------------- Build: Debug in test (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -LC:\boost_1_53_0\lib -LC:\curl-7.30.0\lib -o bin\Debug\test.exe obj\Debug\main.o -static C:\boost_1_53_0\stage\lib\* C:\curl-7.30.0\lib\libcurl.a C:\curl-7.30.0\lib\libssl.a C:\GnuWin32\lib\libz.a C:\MinGW\lib\libwldap32.a C:\MinGW\lib\libws2_32.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libgdi32.a
C: \curl-7.30.0\lib\libcurl.a(url.o): (.text.unlikely+0x8f): undefined reference toidna\_to\_ascii_lz' C: \\curl-7.30.0\\lib\\libcurl.a(url.o): (.text.unlikely+0x96): undefined reference to
stringprep_locale_charset'
C: \curl-7.30.0\lib\libcurl.a(url.o): (.text.unlikely+0xfe): undefined reference toidna\_to\_unicode_lzlz' C: \\curl-7.30.0\\lib\\libcurl.a(url.o): (.text.unlikely+0x122): undefined reference to
tld_check_lz'
C: \curl-7.30.0\lib\libcurl.a(url.o): (.text.unlikely+0x1a4): undefined reference tostringprep\_check\_version' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xe): undefined reference to
BIO_s_mem'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x16): undefined reference toBIO_new' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x38): undefined reference to
X509_NAME_print_ex'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x5c): undefined reference toBIO_ctrl' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x7c): undefined reference to
BIO_free'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xbd): undefined reference toX509\_STORE\_CTX\_get\_current_cert' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xc5): undefined reference to
X509_get_subject_name'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x5db): undefined reference toERR\_clear\_error' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x6a6): undefined reference to
ERR_get_error'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x6b6): undefined reference toERR\_error\_string' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x9a8): undefined reference to
ERR_clear_error'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xa2e): undefined reference toERR\_get\_error' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xa47): undefined reference to
ERR_error_string'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xaa2): undefined reference tosk_num' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xabe): undefined reference to
sk_num'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xadc): undefined reference tosk_value' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xae3): undefined reference to
BIO_s_mem'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xaeb): undefined reference toBIO_new' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xaff): undefined reference to
X509_EXTENSION_get_object'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xb17): undefined reference toi2t\_ASN1\_OBJECT' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xb1f): undefined reference to
X509_EXTENSION_get_critical'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xb6c): undefined reference toX509V3\_EXT\_print' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xb98): undefined reference to
BIO_ctrl'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xc24): undefined reference toBIO_free' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xca0): undefined reference to
ASN1_STRING_print'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xd40): undefined reference toX509\_get\_subject_name' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xd6b): undefined reference to
X509_free'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xdf8): undefined reference tosk_num' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xe6d): undefined reference to
sk_value'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xe79): undefined reference toX509\_get\_subject_name' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xec6): undefined reference to
X509_get_issuer_name'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0xf0f): undefined reference toASN1\_INTEGER\_get' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0xf6d): undefined reference to
X509_get_serialNumber'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x100e): undefined reference toi2t\_ASN1\_OBJECT' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x10f4): undefined reference to
i2t_ASN1_OBJECT'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x1134): undefined reference toX509\_get\_pubkey' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x1163): undefined reference to
EVP_PKEY_free'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x1192): undefined reference toBIO\_s\_mem' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x119a): undefined reference to
BIO_new'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x11ac): undefined reference toPEM\_write\_bio_X509' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x11cc): undefined reference to
BIO_ctrl'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x1215): undefined reference toBIO_free' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x1345): undefined reference to
X509_get_ext_d2i'
C: \curl-7.30.0\lib\libcurl.a(ssluse.o): (.text+0x1359): undefined reference tosk_num' C: \\curl-7.30.0\\lib\\libcurl.a(ssluse.o): (.text+0x1393): undefined reference to
sk_value'
Process terminated with status 1 (0 minutes, 34 seconds)
50 errors, 0 warnings (0 minutes, 34 seconds)es klappt nicht...
da ich in c++ jetzt noch nicht so bewandert bin weiss ich auch nicht ob curl die beste Lösung für die gegebene Problemstellung ist.
Gruß
<-
-
Googeln deiner Fehlermeldung ergibt, dass libcurl noch die libidn benötigt, die hier aber nicht mit gelinkt wird.
-
ich habe mir die libidn nun noch heruntergeladen und nach selbigen verfahren gelink, aber das resultat ist das selbe
-
Da fehlt noch OpenSSL
-
der fehler log ist nun wesentlich kürzer
-------------- Build: Debug in test (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -LC:\boost_1_53_0\lib -LC:\libidn\lib -LC:\OpenSSL-Win64\lib -LC:\curl-7.30.0\lib -o bin\Debug\test.exe obj\Debug\main.o C:\MinGW\lib\libws2_32.a C:\boost_1_53_0\stage\lib\* C:\curl-7.30.0\lib\libcurl.a C:\OpenSSL-Win64\lib\libeay32.lib C:\OpenSSL-Win64\lib\ssleay32.lib C:\GnuWin32\lib\libz.a C:\MinGW\lib\libwldap32.a C:\MinGW\lib\libwinmm.a C:\MinGW\lib\libgdi32.a C:\libidn\lib\libidn.a
obj\Debug\main.o: In functionmain': C:/Users/Seb/Documents/test/main.cpp:10: undefined reference to
_imp__curl_easy_init'
C:/Users/Seb/Documents/test/main.cpp:12: undefined reference to\_imp\_\_curl\_easy\_setopt' C:/Users/Seb/Documents/test/main.cpp:13: undefined reference to
_imp__curl_easy_perform'
C:/Users/Seb/Documents/test/main.cpp:16: undefined reference to `_imp__curl_easy_cleanup'
collect2: ld gab 1 als Ende-Status zurück
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 0 warnings (0 minutes, 0 seconds)wenn ich aber nun ein open ssl test machen möchte
#include <openssl/applink.c> // To prevent crashing (see the OpenSSL FAQ) #include <openssl/bio.h> // BIO objects for I/O #include <openssl/ssl.h> // SSL and SSL_CTX for SSL connections #include <openssl/err.h> // Error reporting #include <stdio.h> // If you don't know what this is for stop reading now. void openssltest(void); int main(int argc, char** argv) { CRYPTO_malloc_init(); // Initialize malloc, free, etc for OpenSSL's use SSL_library_init(); // Initialize OpenSSL's SSL libraries SSL_load_error_strings(); // Load SSL error strings ERR_load_BIO_strings(); // Load BIO error strings OpenSSL_add_all_algorithms(); // Load all available encryption algorithms openssltest(); // We'll define this later. return 0; }
gibt der sachen wie
-------------- Build: Debug in test (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -g -IC:\boost_1_53_0 -IC:\libidn\include -IC:\OpenSSL-Win64\include -IC:\curl-7.30.0\include -c C:\Users\Seb\Documents\test\main.cpp -o obj\Debug\main.o
In file included from C:\Users\Seb\Documents\test\main.cpp:22:0:
C:\OpenSSL-Win64\include/openssl/applink.c: In Funktion »void** OPENSSL_Applink()«:
C:\OpenSSL-Win64\include/openssl/applink.c:60:45: Fehler: ungültige Umwandlung von »void* ()()« in »void« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:61:41: Fehler: ungültige Umwandlung von »void* ()()« in »void« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:62:41: Fehler: ungültige Umwandlung von »void* ()()« in »void« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:63:42: Fehler: ungültige Umwandlung von »int ()(FILE, const char*, ...) {aka int ()(_iobuf, const char*, ...)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:64:40: Fehler: ungültige Umwandlung von »char* ()(char, int, FILE*) {aka char* ()(char, int, _iobuf*)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:65:40: Fehler: ungültige Umwandlung von »size_t ()(void, size_t, size_t, FILE*) {aka unsigned int ()(void, unsigned int, unsigned int, _iobuf*)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:66:41: Fehler: ungültige Umwandlung von »size_t ()(const void, size_t, size_t, FILE*) {aka unsigned int ()(const void, unsigned int, unsigned int, _iobuf*)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:67:42: Fehler: ungültige Umwandlung von »int ()(FILE, char) {aka int ()(_iobuf, char)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:68:39: Fehler: ungültige Umwandlung von »int ()(FILE) {aka int ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:69:41: Fehler: ungültige Umwandlung von »int ()(FILE) {aka int ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:71:40: Fehler: ungültige Umwandlung von »FILE* ()(const char, const char*) {aka _iobuf* ()(const char, const char*)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:72:40: Fehler: ungültige Umwandlung von »int ()(FILE, long int, int) {aka int ()(_iobuf, long int, int)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:73:40: Fehler: ungültige Umwandlung von »long int ()(FILE) {aka long int ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:74:41: Fehler: ungültige Umwandlung von »int ()(FILE) {aka int ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:75:41: Fehler: ungültige Umwandlung von »int ()(FILE) {aka int ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:76:43: Fehler: ungültige Umwandlung von »void ()(FILE) {aka void ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:77:41: Fehler: ungültige Umwandlung von »int ()(FILE) {aka int ()(_iobuf)}« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:79:39: Fehler: ungültige Umwandlung von »int ()(const char, int, ...)« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:80:39: Fehler: ungültige Umwandlung von »int ()(int, void, unsigned int)« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:81:40: Fehler: ungültige Umwandlung von »int ()(int, const void, unsigned int)« in »void*« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:82:40: Fehler: ungültige Umwandlung von »long int ()(int, long int, int)« in »void« [-fpermissive]
C:\OpenSSL-Win64\include/openssl/applink.c:83:40: Fehler: ungültige Umwandlung von »int ()(int)« in »void« [-fpermissive]
Process terminated with status 1 (0 minutes, 0 seconds)
22 errors, 0 warnings (0 minutes, 0 seconds)aus, ich das gefühl da ist etwas sehr faul
-
seb-eisdrache schrieb:
der fehler log ist nun wesentlich kürzer
Link mal gegen die curl DLL, nicht gegen die statische Library.
wenn ich aber nun ein open ssl test machen möchte
[...]
aus, ich das gefühl da ist etwas sehr faulHast du einfach den Quellcode von OpenSSL deinem Projekt zugefügt? Das geht natürlich nicht. Der offensichtlichste Grund dafür ist, dass OpenSSL in C geschrieben ist und daher nicht mit einem C++-Compiler übersetzt werden kann. Du musst OpenSSL erst einmal bauen und dann die dabei erstellte Bibliothek benutzen.
-
Ich habe open ssl noch nicht selbst kompeliert, aber wenn ich nun das programm starte und mit einen https beispiel http://curl.haxx.se/libcurl/c/https.html teste mit google bekomme ich folgendes;
curl_easy_perform() failed: Peer certificate cannot be authenticated with given
CA certificates
-
Dir ist schon klar, dass https://example.com nur ein Beispiel ist, oder?
-
ja... deswegen hab ich auch www.google.de dort eingegeben
-
Dann kann ich dir nicht mehr weiter helfen, denn bei mir funktioniert es und googeln kannst du selber. Von der Fehlermeldung her ist wohl irgendetwas falsch konfiguriert. Ich verschiebe dich mal, da das ein sehr allgemeines Problem ist, das alle Nutzer von libcurl kennen könnten, nicht bloß C++-spezifisch.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
soo
ich habe weiter rumgewerkelt...
ich habe libcurl nun mit dem windows nativen ssl mit hilfe von visiual studio express komepeliert und die lib dann in code::blocks eingebunden.
Funktioniert auch soweit, nur stürzt das programm beim clean_up ab.
-
ich konnte lib curl nun mit hilfe von: http://code.google.com/p/twitcurl/wiki/WikiCompileMinGWWindows mit MinGw kompelieren, allerdings hab ich folgende optionen gesetzt:
$ configure --with-winssl --with-winidn --enable-ipv6nur leider stürzt mein programm immer bei curl_easy_cleanup() ab.
konnte leider keinen lösungsansatz bisher finden...
-
ich habe nun versucht die libcurl als statische lib zu kompelieren. Laut google kann dies die abstürze beheben.
aber egal was ich versuche ich bekomme immer (Code::Blocks):
-------------- Build: Debug in test (compiler: GNU GCC Compiler)--------------- mingw32-g++.exe -LC:\boost_1_53_0\lib -LC:\curl\lib -o bin\Debug\test.exe obj\Debug\main.o -static-libgcc -static-libstdc++ C:\boost_1_53_0\stage\lib\* C:\curl\lib\libcurl.a C:\MinGW\lib\libws2_32.a obj\Debug\main.o:main.cpp:(.text+0xf6): undefined reference to `_imp__curl_global_init' obj\Debug\main.o:main.cpp:(.text+0x10c): undefined reference to `_imp__curl_easy_init' obj\Debug\main.o:main.cpp:(.text+0x145): undefined reference to `_imp__curl_easy_setopt' obj\Debug\main.o:main.cpp:(.text+0x169): undefined reference to `_imp__curl_easy_setopt' obj\Debug\main.o:main.cpp:(.text+0x18a): undefined reference to `_imp__curl_easy_setopt' obj\Debug\main.o:main.cpp:(.text+0x1ae): undefined reference to `_imp__curl_easy_setopt' obj\Debug\main.o:main.cpp:(.text+0x1bf): undefined reference to `_imp__curl_easy_perform' obj\Debug\main.o:main.cpp:(.text+0x1e1): undefined reference to `_imp__curl_easy_strerror' obj\Debug\main.o:main.cpp:(.text+0x333): undefined reference to `_imp__curl_easy_cleanup' obj\Debug\main.o:main.cpp:(.text+0x33a): undefined reference to `_imp__curl_global_cleanup' collect2: ld gab 1 als Ende-Status zurück Process terminated with status 1 (0 minutes, 4 seconds) 10 errors, 0 warnings (0 minutes, 4 seconds)
-
Hast du auch CURL_STATICLIB definiert?
-
irgendwie scheint mit die IDE langasm etwas suspekt... ich hatte es vorher auch immer angegeben bei den #defines aber nun scheint er es kapiert zu haben.
also er hat ohne zu mekern kompeliert.
Aber leider hat dies immer ncoh nicht den absturz bei dem "curl_easy_cleanup(curl);" befehl behoben.