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:
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:
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 reinDas 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 machenHallo 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. (Mitwhich 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, mitadd_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)
oderfind_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 curlUnd 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-linuxDu 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