cURL in C++



  • Nachdem ich schon den ganzen Tag damit verbracht habe, erfolglos nach Lösungen zu suchen, hoffe ich, dass hier jemand eine kennt.

    Ich möchte dieses Beispiel mit cURL unter Windows mit MinGW zum Laufen bringen.

    Versuche ich allerdings, es mit g++ zu kompileren:

    g++ -o Test.exe Test.cpp -DCURL_STATICLIB -I curl\include -L curl\lib -lcurl
    

    bekomme ich immer die gleichen Fehler:

    C:\Users\Xenon\AppData\Local\Temp\ccI5UUEq.o:Test.cpp:(.text+0x87): undefined reference to `_curl_easy_init'
    C:\Users\Xenon\AppData\Local\Temp\ccI5UUEq.o:Test.cpp:(.text+0xb6): undefined reference to `_curl_easy_setopt'
    C:\Users\Xenon\AppData\Local\Temp\ccI5UUEq.o:Test.cpp:(.text+0xc2): undefined reference to `_curl_easy_perform'
    C:\Users\Xenon\AppData\Local\Temp\ccI5UUEq.o:Test.cpp:(.text+0xd9): undefined reference to `_curl_easy_strerror'
    C:\Users\Xenon\AppData\Local\Temp\ccI5UUEq.o:Test.cpp:(.text+0x101): undefined reference to `_curl_easy_cleanup'
    collect2.exe: error: ld returned 1 exit status
    

    Ich habe ehrlich keine Ideen mehr, was diese Fehlermeldungen verursachen könnte...
    Ich danke also im Voraus für jegliche Hilfe.



  • extern "C" um den curl.h-#include rummachen.



  • Danke für die Antwort!
    In meinem Code ist nun ein

    extern "C" {
    #include <curl/curl.h>
    }
    

    Leider ändert sich die Fehlermeldung aber dadurch nicht.

    Falls es hilfreich sein sollte; ich habe auch noch versucht, den Compiler mit dem Parameter -v auszuführen. Ergebnis:

    >g++ -v -o Test.exe Test.cpp -DCURL_STATICLIB -I curl\include -L curl\lib -lcurl
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.0/lto-wrapper.exe
    Target: mingw32
    Configured with: ../gcc-4.7.0/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
    Thread model: win32
    gcc version 4.7.0 (GCC)
    COLLECT_GCC_OPTIONS='-v' '-o' 'Test.exe' '-D' 'CURL_STATICLIB' '-I' 'curl\include' '-Lcurl\lib' '-shared-libgcc' '-mtune=i386' '-march=i386'
     c:/mingw/bin/../libexec/gcc/mingw32/4.7.0/cc1plus.exe -quiet -v -I curl\include
     -iprefix c:\mingw\bin\../lib/gcc/mingw32/4.7.0/ -D CURL_STATICLIB Test.cpp -quiet -dumpbase Test.cpp -mtune=i386 -march=i386 -auxbase Test -version -o C:\Users\Xenon\AppData\Local\Temp\ccsSlqnP.s
    GNU C++ (GCC) version 4.7.0 (mingw32)
            compiled by GNU C version 4.7.0, GMP version 5.0.1, MPFR version 2.4.1,
    MPC version 0.8.1
    GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
    ignoring nonexistent directory "c:\mingw\bin\../lib/gcc/mingw32/4.7.0/../../../../mingw32/include"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.0/include/c++"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.0/include/c++/mingw32"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.0/include/c++/backward"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.0/include"
    ignoring nonexistent directory "/mingw/include"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
    ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.0/include-fixed"
    ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.7.0/../../../../mingw32/include"
    ignoring nonexistent directory "/mingw/include"
    #include "..." search starts here:
    #include <...> search starts here:
     curl\include
     c:\mingw\bin\../lib/gcc/mingw32/4.7.0/include/c++
     c:\mingw\bin\../lib/gcc/mingw32/4.7.0/include/c++/mingw32
     c:\mingw\bin\../lib/gcc/mingw32/4.7.0/include/c++/backward
     c:\mingw\bin\../lib/gcc/mingw32/4.7.0/include
     c:\mingw\bin\../lib/gcc/mingw32/4.7.0/../../../../include
     c:\mingw\bin\../lib/gcc/mingw32/4.7.0/include-fixed
    End of search list.
    GNU C++ (GCC) version 4.7.0 (mingw32)
            compiled by GNU C version 4.7.0, GMP version 5.0.1, MPFR version 2.4.1, MPC version 0.8.1
    GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
    Compiler executable checksum: 9fc40f37d31a03e5502141ce58bdf4c7
    COLLECT_GCC_OPTIONS='-v' '-o' 'Test.exe' '-D' 'CURL_STATICLIB' '-I' 'curl\include' '-Lcurl\lib' '-shared-libgcc' '-mtune=i386' '-march=i386'
     c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/as.exe -o C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o C:\Users\Xenon\AppData\Local\Temp\ccsSlqnP.s
    COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/4.7.0/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/
    LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/4.7.0/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../
    COLLECT_GCC_OPTIONS='-v' '-o' 'Test.exe' '-D' 'CURL_STATICLIB' '-I' 'curl\include' '-Lcurl\lib' '-shared-libgcc' '-mtune=i386' '-march=i386'
     c:/mingw/bin/../libexec/gcc/mingw32/4.7.0/collect2.exe -Bdynamic -u ___register_frame_info -u ___deregister_frame_info -o Test.exe c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../crt2.o c:/mingw/bin/../lib/gcc/mingw32/4.7.0/crtbegin.o -Lcurl\lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.7.0 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../.. C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o -lcurl -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32
     -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt c:/mingw/bin/../lib/gcc/mingw32/4.7.0/crtend.o
    C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o:Test.cpp:(.text+0xf): undefined reference to `_curl_easy_init'
    C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o:Test.cpp:(.text+0x36): undefined reference to `_curl_easy_setopt'
    C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o:Test.cpp:(.text+0x42): undefined reference to `_curl_easy_perform'
    C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o:Test.cpp:(.text+0x59): undefined reference to `_curl_easy_strerror'
    C:\Users\Xenon\AppData\Local\Temp\ccYxunOQ.o:Test.cpp:(.text+0x81): undefined reference to `_curl_easy_cleanup'
    collect2.exe: error: ld returned 1 exit status
    


  • Das klingt nicht nach einem Header Fehler, "ld.exe" ist der Linker... 🙄

    Hast du dem Linker mitgeteilt das er die Lib dazu auch linken soll ?



  • [quote="DarkShadow44"]Das klingt nicht nach einem Header Fehler, "ld.exe" ist der Linker... 🙄

    Nicht die Augen verdrehen, wenn du keine Ahnung hast. Das extern "C" ist sehrwohl notwendig, wenn man in C++ C-Header einbindet - Stichwort "name mangling".

    Hier ist es aber wohl tatsächlich nicht notwendig, da curl.h das selbst macht (in ein #ifdef __cplusplus gepackt, wie sich das gehört), aber leider erst in Zeile 90, weshalb ich das beim schnellen Nachschauen nicht gesehen hab.

    Hast du dem Linker mitgeteilt das er die Lib dazu auch linken soll ?

    Das hat er ("-lcurl").
    Das Problem liegt aber wohl am static "-DCURL_STATIC". Da hab ich jetzt keine AHnung, wie unter Windows mit MinGW statisches Linken zu bewerkstelligen ist, und was obiges Flag jetzt genau macht, ob es überhaupt einen Einfluss hat uswusf.
    Vielleicht hat das ja schonmal wer in dieser Konstellation bewerkstelligt.


Anmelden zum Antworten