C++ REST client Library (Linux aarch64) Verständnis Problem



  • Guten Morgen Leute,

    ich habe wieder mal ein ganz neues Projekt vor mir. Dabei handelt es sich um Linux snaps in c++ auf einem Linux Hardware.

    Ich möchte hier eine C++ REST Client Implementierung und habe da ne "easy" lbraray

    https://bestofcpp.com/repo/mrtazz-restclient-cpp-cpp-network

    auf Basis der Libcurl gedacht: und dafür müsste ich mir ja dann hier:

    https://curl.se/download.html

    die entsprechende binary laden, nun bin ich verwirrten was die Plattform anbelangt, ich weiß dass ARM64 verwendet wird,

    aber wenn ich die CMake anschauen, bin ich verwirrt!? (was is aarch64)

    if( UNIX )
    
      IF( ${CMAKE_BUILD_KIT} MATCHES "aarch64")
    
        MESSAGE(STATUS "Set Platformname to: linux-gcc-aarch64")
    
        set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
    
        set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
    
        SET( PLATFORM_NAME "linux-gcc-aarch64")   
    
        SET( SNAP_ARCH "arm64")
    
      ELSE()
    
        MESSAGE(STATUS "Set Platformname to: linux-gcc-x64")
    
        SET( PLATFORM_NAME "linux-gcc-x64")
    
        set(CMAKE_C_COMPILER gcc)
    
        set(CMAKE_CXX_COMPILER g++)
    
        SET( SNAP_ARCH "amd64")
    
      ENDIF()
    
    endi
    

    das ganze hab ich in ner Linux ubuntu VM mit Visual Studio Code sampt compiler etc. drin am laufen.

    Oder was würdet ihr für ne REST CLient (free) linux verwenden!?;)Fettschrift



  • Aarch64 ist ARM64. Es steht für ARM Architecture 64 Bit. Aber so ziemlich die ganze Welt findet diese Bezeichnung ein wenig bescheuert und nennt es lieber ARM64. 😂



  • Bezüglich deiner Frage nach Alternativen:

    https://github.com/libcpr/cpr

    Auch auf curl Basis mit einer schöner Syntax. Curl ist (optional?) mit FetchContent eingebunden.
    Daher wenn du z.B. die Lib in CMake auch mit FetchContent einbindest, kriegst du direkt curl mit dazu.



  • @VLSI_Akiko sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Aarch64 ist ARM64. Es steht für ARM Architecture 64 Bit. Aber so ziemlich die ganze Welt findet diese Bezeichnung ein wenig bescheuert und nennt es lieber ARM64.

    ja ok verstanden, danke 😉

    @Leon0402 sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Bezüglich deiner Frage nach Alternativen:
    https://github.com/libcpr/cpr
    Auch auf curl Basis mit einer schöner Syntax. Curl ist (optional?) mit FetchContent eingebunden.
    Daher wenn du z.B. die Lib in CMake auch mit FetchContent einbindest, kriegst du direkt curl mit dazu.

    hmm ok danke für die alternative. letzter abschnitt (Bahnhof für mich) kenn mich mit FetchContetn und cmake nicht aus.

    Unhabhäng davon finde ich auf der libcur download page, binary für ARM64 aber auch für Linux Ubunut!?!? was nehm ich jetzt da? das verstehe ich jetzt auch nich ganz:)

    EDIT: verwende Cmake 3.9 für FetchContent brauch ich 3.11.. kann es problem geben wenn ich cmake upgrade (besehenden projekt?) cmake is neuland



  • @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    hmm ok danke für die alternative. letzter abschnitt (Bahnhof für mich) kenn mich mit FetchContetn und cmake nicht aus.

    FetchContent ist so ähnlich wie git submodule, falls du das gehst. Du gibst nen git Repo z.B. auf Github + commit hash / tag / release an und cmake downloaded das Projekt in deinen build Ordner.
    Anschließend wird es als Teil deiner Applikation mitgebaut.

    Daher es passiert quasi ein add_subdirectory("build/_deps/<my-git-project-dependency>"). Das ist also die saubere Variante von "Ich nehme das Projekt und kopiere es bei mir in das Projekt rein 😉

    Das schöne daran ist, dass du z.B. das Projekt auch konfigurieren kannst. Z.B. kannst du meistens mit BUILD_SHARED_LIBS sagen, ob du die Library statisch oder dynamisch haben willst.
    Du kannst auch genau die Version spezifizieren und leicht upgraden oder downgraden.
    Beim Package Manager kriegst du halt meistens eine spezifische Version in einer spezifischen Konfiguration (shared lib).

    P.S.: FetchContent nutzt man vor allem für die Entwicklung. Es hat nichts damit zu tun wie du später die Software auslieferst an Kunden o.ä. z.B. kannst du natürlich beim Installieren sagen: Installiere nur mein eigenes Projekt und suche nach einem Curl auf deinem System installiert.

    FetchContent würde ich insbesondere für kleinere - mittelgroße Libraries auf Github / GitLab etc. empfehlen.
    Z.B. QT (riesiges Framework) solltest du eher nicht damit einbinden.

    @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    EDIT: verwende Cmake 3.9 für FetchContent brauch ich 3.11.. kann es problem geben wenn ich cmake upgrade (besehenden projekt?) cmake is neuland

    In der Regel ist CMake abwärtskompatibel und es sollte keine Probleme geben. Es kommt aber natürlich auch auf die Größe des Projektes an. Klingt aber eher so als wäre es eine eher kleine Applikation. Da würde ich auf jeden Fall upgraden.

    Ich empfehle minimum 3.14, da es dort den Befehl FetchContent_MakeAvaiable gibt, der es nochmal etwas einfacher macht.
    Wenn aber nichts dagegen spricht würde ich auf die neuste Version updaten (3.21). Nach 3.11 kam aus meiner Sicht nichts weltbewegendes, aber jede Version hat halt ein paar Kleinigkeiten, die das Leben einfacher / besser machen 😉



  • @Leon0402 sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    hmm ok danke für die alternative. letzter abschnitt (Bahnhof für mich) kenn mich mit FetchContetn und cmake nicht aus.

    FetchContent ist so ähnlich wie git submodule, falls du das gehst. Du gibst nen git Repo z.B. auf Github + commit hash / tag / release an und cmake downloaded das Projekt in deinen build Ordner.
    Anschließend wird es als Teil deiner Applikation mitgebaut.
    Daher es passiert quasi ein add_subdirectory("build/_deps/<my-git-project-dependency>"). Das ist also die saubere Variante von "Ich nehme das Projekt und kopiere es bei mir in das Projekt rein
    Das schöne daran ist, dass du z.B. das Projekt auch konfigurieren kannst. Z.B. kannst du meistens mit BUILD_SHARED_LIBS sagen, ob du die Library statisch oder dynamisch haben willst.
    Du kannst auch genau die Version spezifizieren und leicht upgraden oder downgraden.
    Beim Package Manager kriegst du halt meistens eine spezifische Version in einer spezifischen Konfiguration (shared lib).
    P.S.: FetchContent nutzt man vor allem für die Entwicklung. Es hat nichts damit zu tun wie du später die Software auslieferst an Kunden o.ä. z.B. kannst du natürlich beim Installieren sagen: Installiere nur mein eigenes Projekt und suche nach einem Curl auf deinem System installiert.
    FetchContent würde ich insbesondere für kleinere - mittelgroße Libraries auf Github / GitLab etc. empfehlen.
    Z.B. QT (riesiges Framework) solltest du eher nicht damit einbinden.
    @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    EDIT: verwende Cmake 3.9 für FetchContent brauch ich 3.11.. kann es problem geben wenn ich cmake upgrade (besehenden projekt?) cmake is neuland

    In der Regel ist CMake abwärtskompatibel und es sollte keine Probleme geben. Es kommt aber natürlich auch auf die Größe des Projektes an. Klingt aber eher so als wäre es eine eher kleine Applikation. Da würde ich auf jeden Fall upgraden.
    Ich empfehle minimum 3.14, da es dort den Befehl FetchContent_MakeAvaiable gibt, der es nochmal etwas einfacher macht.
    Wenn aber nichts dagegen spricht würde ich auf die neuste Version updaten (3.21). Nach 3.11 kam aus meiner Sicht nichts weltbewegendes, aber jede Version hat halt ein paar Kleinigkeiten, die das Leben einfacher / besser machen

    Hallo Leon, danke für deine Hilfe:)

    ich versuche das ganze jetzt ohne FetchContent zu machen, und würde gern die entsprechende binary direkt via cmake einbinden, dafür brauche ich eine libcurl.a file oder!?

    Nun bin ich etwas verwirrt, da es auf der libcure dowload page auch libcurl.deb files gibt, ok.. dann habe ich herausgefunden, dass libcurl (alias CURL) in linux ein schon fast Standard service is!? Das bedeutett ja dass die libcurl bereits installiert ist, was nicht heiß dass binary für mich dabei sind!?

    wenn ich die aarch64 linux binary download bekomme ich ne file ohne Endung , die in linux laut file flag executable is. aber ich hätte da jetzt ne *.a erwartet1?

    und mit add_library könnte ich die libcure.a ja einbinden...hmmm

    sorry totaler noob.. will euere Zeit nich verschwenden;)



  • Curl ist unter anderem auch ein Konsolen Programm. Gehe mal in deine Linux console und gib z.B. curl www.google.com ein. (Mit which curl siehst du auch, dass es vermutlich in usr/bin oder so liegt)

    Du kannst eben auch von der Konsole aus Web Requests machen.

    Curl gibt aber eben auch als Library-> https://github.com/curl/curl

    Du solltest libcurl über deinen Package Manager installieren, sofern nicht bereits vorhanden. Für Debian wäre das z.B. https://packages.debian.org/search?keywords=libcurl3-gnutls

    Zu deiner Frage, ob man einfach libcurl.a (Bzw. eher libcurl.so, da es ne shared library sein wird) einfach per target_link_libraries (nicht per add_library) einbinden kann: Ja! Aber tue es nicht!!!

    Um eine Library zu nutzen, brauchst du im zweifelsfall mehrere Sachen:

    • Die Library selbst, daher die .a oder die .so Datei
    • Die Header Files der Library
    • Ggf. noch Libraries, welche deine Library benötigt etc.

    Das könnte irgendwie so aussehen:

    target_link_libraries(MyTarget pfad/auf/meinemSystem/libcurl.so  andere/lib/die/von/curl/benötigt/wird)
    target_include_directories(MyTarget /pfad/zu/curl/include/directories)
    

    evtl. benötigt curl noch irgendwelche speziellen anderen compiler flag oder definitions, dann:

    add_target_definitions(MyTarget ...) 
    add_compile_options(MyTarget ...)
    

    Disclaimer: In Falle von curl und Linux handhabt sich das etwas einfacher, weil halt shared libraries und include Verzeichnisse in Standard Verzeichnissen liegen und deswegen im zweifelsfall sogar ein target_link_libraries(MyTarget libcurl.so) ausreichen würde.

    CMake hat dafür "Targets". Das ist quasi eine Abstraktion davon. Ein Target is eine Library / Executable mit allen diesen Informationen gebündelt (wenn man es richtig gemacht hat). Mit add_library definierst du z.B. ein target, mit add_target_link_libraries fügst du Libraries zum Target hinzu.
    Du hast die Möglichkeit bei den meisten Befehlen eine Visibility anzugeben, um "Vererbung zu erlauben"

    target_link_Libraries(A PUBLIC B PRIVATE C) 
    target_link_libraries(D PRIVATE A) # D hat jetzt A und B (vererbt), aber nicht C!
    

    Targets machen also alles leichter, cross plattform und CMake einigermaßen schön zu nutzen. Deswegen nutze sie!

    Wie kommst du jetzt an ein CMake Target?

    Eine Möglichkeit hatte ich dir schon vorgestellt mit FetchContent.

    Die andere, bei der du Curl auf deinem System verwendest, ist find_package.

    Wie funktioniert find_package?

    Möglichkeit 1 (Best Case): Die Library selbst stellt ein spezielles CMake File mit dem Namen <package>Config.cmake und dieses liegt dann auf deinem System und enthält die Target Definitionen etc.

    Möglichkeit 2 (Doof): Du selbst schreibst ein Find<Package>.cmake Skript, was möglichst cross plattform Logik enthält, um eine Library zu suchen und daraus ein Target zu erstellen. => Im zweifelsfall sucht man natürlich nach nem bereits geschriebenen skript von irgendjemanden auf github oder so.

    Möglichkeit 3 (Auch Okay): CMake hat selbst ein Find<Package>.cmake geschrieben und stellt es dir automatisch zur Verfügung.

    Für bekannte Sachen gibt es oft 1 oder 3. Im Falle von Curl: https://cmake.org/cmake/help/latest/module/FindCURL.html

    Daher mache ein find_package(CURL REQUIRED) oder find_package(CURL COMPONENTS UnixSockets HTTP2 REQUIRED) (Falls du irgendwelche speziellen extras brauchst).

    CMake wird dann nach curl auf deinem System suchen in Standard Pfaden etc. und falls erfolgreich (ansonsten gibt es ne schöne Fehlermeldung) dir ein Target CURL::libcurl zur Verfügung stellen.

    Das heißt hier ungefähr der Code den du brauchst:

    find_package(CURL REQUIRED)
    
    add_executable(MeinTarget)
    target_sources(MeinTarget PRIVATE main.cpp Foo.cpp Bar.cpp) # Deine sources halt
    target_link_libraries(MeinTarget PRIVATE CURL::libcurl)
    


  • puhh... da muss ich mich wohl erst mit beschäftigen 🙂

    @Leon0402 sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Daher mache ein find_package(CURL REQUIRED) oder find_package(CURL COMPONENTS UnixSockets HTTP2 REQUIRED) (Falls du irgendwelche speziellen extras brauchst).

    WEnn ich find_package in mein cmakeLists eintrage und ausführe kommt:

    [cmake] CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
    [cmake]   Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR)
    [cmake] Call Stack (most recent call first):
    [cmake]   /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
    [cmake]   /usr/share/cmake-3.10/Modules/FindCURL.cmake:48 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
    [cmake]   CMakeLists.txt:66 (find_package)
    [cmake]
    

    Curl an sich is ja installiert:

    curl --version
    curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
    Release-Date: 2018-01-24
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
    Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
    

    hmm ich sehe schon mit meinen skill komm ich nicht weiter:)



  • Du must auch die entsprechenden "dev" packete installieren.



  • @firefly sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Du must auch die entsprechenden "dev" packete installieren.

    hab ich , sonst würde Curl nicht funktionieren!?.. hmmm oder soll ich explizt das dev von der curl download page nochmal installieren,!?



  • Nein für die verwendung brauchst du die "dev" pakete nicht.
    Wenn du das curl paket installierst werden nur die binaries installiert um das programm nutzen zu können.
    Aber nicht die developer files (wie header und co) um ein programm zu bauen, welches libcurl verwendet



  • @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    @firefly sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Du must auch die entsprechenden "dev" packete installieren.

    hab ich , sonst würde Curl nicht funktionieren!?.. hmmm oder soll ich explizt das dev von der curl download page nochmal installieren,!?

    Welche Linux Distro hast du? Warum nutzt du nicht den package Manager?



  • @Leon0402 sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Welche Linux Distro hast du? Warum nutzt du nicht den package Manager?

    verwendet Ubuntu 18.04 -... hier bekomm ich auch nur cmake 3.10.2...

    verwendet atp als pacakge manager

    EDIT :

    sick@ubuntu:~$ sudo apt-get install -y libcurl-dev
    Paketlisten werden gelesen... Fertig
    Abhängigkeitsbaum wird aufgebaut.       
    Statusinformationen werden eingelesen.... Fertig
    Paket libcurl-dev ist ein virtuelles Paket, das bereitgestellt wird von:
      libcurl4-openssl-dev 7.58.0-2ubuntu3.16
      libcurl4-nss-dev 7.58.0-2ubuntu3.16
      libcurl4-gnutls-dev 7.58.0-2ubuntu3.16
    Sie sollten eines explizit zum Installieren auswählen.
    
    E: Für Paket »libcurl-dev« existiert kein Installationskandidat.
    sick@ubuntu:~$ ^C
    sick@ubuntu:~$
    

    bin mir oft nich sicher was ich da mache.. aber das klappte auch nich



  • Hast du die Meldung gelesen? Du sollst eins explizit auswählen (ich nutze das letzte "libcurl4-gnutls-dev").



  • @Jockelx sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Hast du die Meldung gelesen? Du sollst eins explizit auswählen (ich nutze das letzte "libcurl4-gnutls-dev").

    ja sorry das hab ich dann auch so gemacht:)

    sudo apt-get install -y libcurl4-gnutls-dev
    

    dann hat er was installiert...

    und mit meinen begrenzten linux kenntnisse mal dann das gemacht

    sudo apt-cache show curl
    

    damit müsste er mir doch zeigen was er alles im packagemanager an libs mit den name curl hat:

    Package: curl
    Architecture: amd64
    Version: 7.58.0-2ubuntu3.16
    Multi-Arch: foreign
    Priority: optional
    Section: web
    Origin: Ubuntu
    Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
    Original-Maintainer: Alessandro Ghedini <ghedo@debian.org>
    Bugs: https://bugs.launchpad.net/ubuntu/+filebug
    Installed-Size: 388
    Depends: libc6 (>= 2.17), libcurl4 (= 7.58.0-2ubuntu3.16), zlib1g (>= 1:1.1.4)
    Filename: pool/main/c/curl/curl_7.58.0-2ubuntu3.16_amd64.deb
    Size: 158796
    MD5sum: e5df9d6d7dc54ec5e638590d284fe352
    SHA1: 7e182b6ae08d60b324fca717345579113105aaf6
    SHA256: 50bfe5c8151aa26d0d096166765fceaba1f6044614d343e0d89fc31222b6a5be
    SHA512: 55a49db12b720402b91f71e248664763b5fe573147bce7ea891b735a4513b60a3830c00571c435ffc80339f340cdb615d79705fa0bdf39bced48946189dc697f
    Homepage: http://curl.haxx.se
    Description-de: Befehlszeilenwerkzeug zur Dateiübertragung mit URL-Syntax
     curl ist ein Befehlszeilenwerkzeug zur Dateiübertragung mit URL-Syntax. Es
     unterstützt DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,
     LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET und TFTP.
     .
     curl unterstützt SSL-Zertifikate, HTTP POST, HTTP PUT, Hochladen zu FTP,
     Hochladen von HTTP-Formularen, Proxys, Cookies, Benutzerauthentifizierung
     mit Name und Passwort (einfach, verschlüsselt (Digest), NTLM, Negotiate,
     Kerberos), Wiederaufnahme von Dateiübertragungen, tunneln von HTTP-Proxys
     und jede Menge weitere nützliche Tricks.
    Description-md5: f83293d10df083ae6f7bb7d01642913c
    Task: cloud-image, server, ubuntu-budgie-desktop
    Supported: 5y
    
    Package: curl
    Architecture: amd64
    Version: 7.58.0-2ubuntu3
    Multi-Arch: foreign
    Priority: optional
    Section: web
    Origin: Ubuntu
    Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
    Original-Maintainer: Alessandro Ghedini <ghedo@debian.org>
    Bugs: https://bugs.launchpad.net/ubuntu/+filebug
    Installed-Size: 386
    Depends: libc6 (>= 2.17), libcurl4 (= 7.58.0-2ubuntu3), zlib1g (>= 1:1.1.4)
    Filename: pool/main/c/curl/curl_7.58.0-2ubuntu3_amd64.deb
    Size: 158884
    MD5sum: 43f1eab4dcfdaab2d4b9f8ade5b5c58e
    SHA1: 5878faa881e0b475d3a6870b47423b0f0304a530
    SHA256: 02c53c28334b2c6b1aa9643ae585744ee90ce113fbb7699f9607e38e82b9d526
    Homepage: http://curl.haxx.se
    Description-de: Befehlszeilenwerkzeug zur Dateiübertragung mit URL-Syntax
     curl ist ein Befehlszeilenwerkzeug zur Dateiübertragung mit URL-Syntax. Es
     unterstützt DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,
     LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET und TFTP.
     .
     curl unterstützt SSL-Zertifikate, HTTP POST, HTTP PUT, Hochladen zu FTP,
     Hochladen von HTTP-Formularen, Proxys, Cookies, Benutzerauthentifizierung
     mit Name und Passwort (einfach, verschlüsselt (Digest), NTLM, Negotiate,
     Kerberos), Wiederaufnahme von Dateiübertragungen, tunneln von HTTP-Proxys
     und jede Menge weitere nützliche Tricks.
    Description-md5: f83293d10df083ae6f7bb7d01642913c
    Task: cloud-image, server, ubuntu-budgie-desktop
    Supported: 5y
    

    aber das is die command-curl anwendung ode !? (die verwendet libcurl we ich sehe? aber wie finde ich die, bzw.
    we referenzier ich mich mit cmake auf die libcurl (die irgendwo sein muss!?!)

    wenn ich dann dann das dateilsystem mach "curl" suche (k.a. ob das so richtig is):

    find ./ -name *curl*
    

    komm das

    ./cmake-3.20.0/Utilities/cmcurl
    ./cmake-3.20.0/Utilities/cmcurl/include/curl
    ./cmake-3.20.0/Utilities/cmcurl/include/curl/curlver.h
    ./cmake-3.20.0/Utilities/cmcurl/include/curl/curl.h
    ./cmake-3.20.0/Utilities/cmcurl/CMake/curl-config.cmake.in
    ./cmake-3.20.0/Utilities/cmcurl/curltest.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_gethostname.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_des.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_gssapi.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_printf.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/libcurl.rc
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_setup.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ntlm_core.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_sspi.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_base64.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_multibyte.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_range.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ntlm_wb.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_get_line.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_threads.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_addrinfo.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/libcmcurl.a
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_config.h.cmake
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_path.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_threads.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_config.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_gssapi.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_multibyte.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curlx.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ntlm_wb.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_fnmatch.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_memrchr.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_addrinfo.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_memory.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_sha256.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_range.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_rtmp.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ctype.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_endian.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ctype.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_md4.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_sspi.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_fnmatch.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ntlm_core.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_setup_once.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_rtmp.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_hmac.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_gethostname.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_get_line.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_endian.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_sasl.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_krb5.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_sasl.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_md5.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_path.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_sspi.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_fnmatch.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_path.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_threads.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_rtmp.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_threads.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_gethostname.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_multibyte.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_ntlm_core.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_ctype.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_sspi.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_sasl.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_des.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_memrchr.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_gssapi.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_addrinfo.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_memrchr.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_endian.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_addrinfo.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_gssapi.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_get_line.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_get_line.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_ntlm_wb.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_fnmatch.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_range.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_rtmp.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_ctype.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_des.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_ntlm_core.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_sasl.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_multibyte.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_gethostname.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_range.c.o.d
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_ntlm_wb.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/CMakeFiles/cmcurl.dir/curl_endian.c.o
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_des.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_ldap.h
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_path.c
    ./cmake-3.20.0/Utilities/cmcurl/lib/curl_memrchr.h
    ./cmake-3.20.0/Utilities/cmcurl/curltest
    ./cmake-3.20.0/Utilities/cmcurl/CMakeFiles/curltest.dir
    ./cmake-3.20.0/Utilities/cmcurl/CMakeFiles/curltest.dir/curltest.c.o
    ./cmake-3.20.0/Utilities/cmcurl/CMakeFiles/curltest.dir/curltest.c.o.d
    ./cmake-3.20.0/Utilities/Scripts/update-curl.bash
    ./cmake-3.20.0/Utilities/cm3p/curl
    ./cmake-3.20.0/Utilities/cm3p/curl/curl.h
    

    leider keine lib files von libcurl 😞



  • @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    wenn ich dann dann das dateilsystem mach "curl" suche (k.a. ob das so richtig is):
    find ./ -name curl

    Und von welchem verzeichnis aus hast du das gemacht? -> Sieht so aus als wärst du in deinem home verzeichnis und suchst nur in dem.

    Probier mal:

    find /usr/ -name *curl*
    

    Das liefert u.a. bei mir:

    /usr/lib/libcurl.so
    /usr/lib/libcurl.so.4
    /usr/lib/libcurl.so.4.7.0
    /usr/bin/curl
    /usr/include/curl
    /usr/include/curl/curl.h
    /usr/include/curl/curlver.h
    

    Also sprich shared library, curl binary für die konsole und include verzeichnisse.

    Gibt dir CMake denn immer noch den selben Fehler? Hat sich irgendwas geänder? (Sagt er immer noch missing CURL_LIBRARY und CURL_INCLUDE_DIR?)



  • @Leon0402 sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    Und von welchem verzeichnis aus hast du das gemacht? -> Sieht so aus als wärst du in deinem home verzeichnis und suchst nur in dem.

    Aha ok:

    /usr/include/x86_64-linux-gnu/curl
    /usr/include/x86_64-linux-gnu/curl/curlver.h
    /usr/include/x86_64-linux-gnu/curl/curl.h
    /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
    /usr/lib/x86_64-linux-gnu/libcurl-gnutls.a
    /usr/lib/x86_64-linux-gnu/libcurl.so
    /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so
    /usr/lib/x86_64-linux-gnu/libcurl.so.4.5.0
    /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.5.0
    /usr/lib/x86_64-linux-gnu/pkgconfig/libcurl.pc
    /usr/lib/x86_64-linux-gnu/libcurl.so.4
    /usr/lib/x86_64-linux-gnu/libcurl.la
    /usr/lib/x86_64-linux-gnu/libcurl.a
    /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
    /usr/lib/x86_64-linux-gnu/libcurl-gnutls.la
    /usr/lib/python3.6/macurl2path.py
    /usr/lib/python3.6/__pycache__/macurl2path.cpython-36.pyc
    /usr/lib/python2.7/macurl2path.py
    /usr/lib/python2.7/macurl2path.pyc
    /usr/bin/curl
    /usr/bin/curl-config
    /usr/share/aclocal/libcurl.m4
    /usr/share/lintian/overrides/libcurl3-gnutls
    /usr/share/bash-completion/completions/curl
    /usr/share/zsh/vendor-completions/_curl
    /usr/share/man/man1/curl.1.gz
    /usr/share/man/man1/curl-config.1.gz
    /usr/share/doc/curl
    /usr/share/doc/libcurl4
    /usr/share/doc/libcurl3-gnutls
    /usr/share/doc/libcurl4-gnutls-dev
    

    jetzt müste ich ja die "/usr/lib/x86_64-linux-gnu/libcurl.so" mit Add_library in cmakelist einfügen können!?

    Aber du meintest das "statiche" einbinden von a oder so files in die cmakelist is nicht ok!?

    EDIT:

    ok

    /usr/include/x86_64-linux-gnu/curl
    /usr/include/x86_64-linux-gnu/curl/curlver.h
    /usr/include/x86_64-linux-gnu/curl/curl.h
    

    oder das sind die header für mein Host linux,

    ich kompiliere code für ein linux sub-system für arm64. d.h. ich muss die libcurl arm64 für das sub-system installieren... hmm.. oh jesus:09



  • @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    ich kompiliere code für ein linux sub-system für arm64. d.h. ich muss die libcurl arm64 für das sub-system installieren... hmm.. oh jesus:09

    Dann musst du dich mit cross compiling und dem setup der entsprechenden dependencies beschäftigen.
    Oder du verwendest zum bauen direkt ein ARM64 system mit linux



  • @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    jetzt müste ich ja die "/usr/lib/x86_64-linux-gnu/libcurl.so" mit Add_library in cmakelist einfügen können!?
    Aber du meintest das "statiche" einbinden von a oder so files in die cmakelist is nicht ok!?

    Irgendwie nervt es mich etwas mich widerholen zu müssen. Wenn irgendwas unklar an meinem Post oben war, in dem ich erklärt habe, warum man eher mit CMake Targets arbeiten sollte, dann stell gerne Fragen.
    Aber ich weiß nicht, was ich auf "?!" antworten soll.

    @SoIntMan sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    ich kompiliere code für ein linux sub-system für arm64. d.h. ich muss die libcurl arm64 für das sub-system installieren... hmm.. oh jesus:09

    Das wäre vlt. durchaus eine relevante Info gewesen. Ja das nennt sich cross compiling. Dein Stichwort für cmake sind hier Toolchains:
    https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-linux

    Du musst dann halt CMake sagen, wo er die sachen für dein Zielsystem findet und Compiler, Library Pfade etc. mit den entsprechenden cmake variablen setzen.



  • @Leon0402 sagte in C++ REST client Library (Linux aarch64) Verständnis Problem:

    rgendwie nervt es mich etwas mich widerholen zu müssen. Wenn irgendwas unklar an meinem Post oben war, in dem ich erklärt habe, warum man eher mit CMake Targets arbeiten sollte, dann stell gerne Fragen.
    Aber ich weiß nicht, was ich auf "?!" antworten soll.

    Ja hast recht, ich stell mich gerade blöd an.. sorry.

    ich werde mich da jetzt erst mal intensiv beschäftigen, und frage dann konkret:)

    Danke euch für die Hilfe


Anmelden zum Antworten