Handling mit externen Libraries



  • Hallo Leute.
    Ich beschäftige mich seit einiger Zeit wieder mit C++. Ich bin zwar kein Profi, aber auch kein absoluter Noob. Seid also bitte nicht ganz so hart zu mir 😊

    Ich habe eine allgmeine Verständnisfrage:
    Es gibt ja zig Libraries für C++ für die unterschiedlichsten Aufgaben, sei es auf Github oder anderen Seiten. Meine Frage dazu ist, wieso ist es unbedingt notwenig für gewisse Aufgaben solche Libraries zu Verwenden? Es wird jedenfalls für diverse Aufgaben auf solche verwiesen. Ich habe bspw. in einem anderen Forum gelesen, dass man für diese oder jene Aufgabe eine Library benötigt, da die C++ Basicsprache für dieses oder jenes nicht in der Lage sei. Aber wie kann das sein, denn die Libraries selbst wurden doch auch in C++ oder in C geschrieben oder nicht?
    Konnte mir das bitte jemand erklären?

    Ich kann verstehen, dass man Libraries nutzt, weil sie die Dinge vereinfachen, da Beispielsweise vordefinierte Funktionen enthalten sind, die man sonst selbst schreiben müsste, aber im Allgemeinen müsste man doch auch, sofern man die Sprache beherscht, auch ohne Libraries ans Ziel kommen, oder sehe ich das Falsch. Wie gesagt, das ist nur eine Verständnisfrage.

    Des Weiteren würde ich gerne wissen, wieso es teilweise so unglaublich Kompliziert ist, solche Libraries in sein Projekt einzubinden. Natürlich ist das für geübte kein Problem, aber ich, da ich vorher nie externe gebraucht habe, stellt das schon vor eine Herausvorderung dar.

    -Library herunterladen,
    -Build mit cmake
    -In VS2019 öffnen
    -Copilieren
    -ins Projekt einbinden
    -etc.
    Ich dachte immer, ich lade das ding einfach runter, binde die Header-Dateien in mein Projekt und gut, aber das ganze drumherum finde ich, für ungeübte, oder zumindest für leute die cmake nicht kennen (Mich eingeschlossen) echt kompliziert.
    Meine Frage dazu wäre, ob mir jemand das Prozedere mal erklären kann, damit ich da etwas mehr Überblick bekomme. Ich gehe eigentlich nur die Anleitungen auf Github durch, weiß aber garnicht, warum ich das so oder so machen muss.
    Wäre toll wenn jemand da eine Art "How to" für mich hätte, oder einen Link, wo ich mir das mal genauer durchlesen kann, was da überhaupt passert.
    Und wieso sind die Libs nicht vorcompiliert? (Ist das das richtige Wort?)
    Wieso wird nicht einfach ein Ordner mit alles Dateien zurverfügung gestellt, auf den man in seinem Projekt verweist und gut? Wie gesagt, ich kenne das Prozedere dahinter nicht, daher die Frage.

    Ich danke euch 🙏



  • Du benötigst die Bibliotheken nicht. Du kannst alles selber schreiben. Ist aber eine Frage der Zeit und der Fähigkeiten.



  • @robert123 sagte in Handling mit externen Libraries:

    Ich habe bspw. in einem anderen Forum gelesen, dass man für diese oder jene Aufgabe eine Library benötigt, da die C++ Basicsprache für dieses oder jenes nicht in der Lage sei. Aber wie kann das sein, denn die Libraries selbst wurden doch auch in C++ oder in C geschrieben oder nicht?

    Die Sprache C++ selbst weiß nicht, auf was für einem Gerät du überhaupt arbeitest - und was für ein Betriebssystem da läuft. Dinge wie z.B. Grafik sind so nicht in C++ drin - aber dein Betriebssystem bietet dir dann Schnittstellen an, mit denen es eben doch geht. Ggf. musst du dann auch assembler verwenden, um bestimmte Calls zu machen. Problem: das ist in C++ implementation-defined. Das ist also nicht standardisiert (wie auch, hängt ja stark von der Hardware ab).

    Des Weiteren würde ich gerne wissen, wieso es teilweise so unglaublich Kompliziert ist, solche Libraries in sein Projekt einzubinden. Natürlich ist das für geübte kein Problem, aber ich, da ich vorher nie externe gebraucht habe, stellt das schon vor eine Herausvorderung dar.

    Ist doch klar: damit du eine andere Sprache nimmst 😉

    Und wieso sind die Libs nicht vorcompiliert? (Ist das das richtige Wort?)

    Es gibt auch vorkompilierte Libraries. Nur: bedenke, dass du auf unterschiedlichsten Systemen arbeiten kannst, und jedes Mal muss ggf. ein anderer Compiler bzw. andere Compilereinstellungen verwendet werden. Du kannst ja z.B. auch mit Debug-Symbolen kompilieren, mit dem Address Sanitizer, mit Erweiterungen für den Prozessor XY (dann geht der Code aber auf älteren Prozessoren ggf. nicht mehr), oder du kompilierst mit C++11 oder gar mit C++03-Standard -- dann sind die ABIs aber nicht kompatibel. Und Templates müssen sowieso im Header sein...

    Wieso wird nicht einfach ein Ordner mit alles Dateien zurverfügung gestellt, auf den man in seinem Projekt verweist und gut? Wie gesagt, ich kenne das Prozedere dahinter nicht, daher die Frage.

    Dazu müsste es einen Standard geben, wie man sowas zu organisieren hat. Nicht jeder verwendet cmake. Nur Windows-Nutzer haben Visual Studio. Und so weiter.

    Mit cmake normalerweise:

    • Projekt kompilieren und installieren
    • Projekt bringt eine "Find<NAME_DER_LIB>.cmake"-Datei mit, die man in sein eigenes Projekt kopiert und bekannt macht (wenn cmake das nicht schon von Haus aus kann)
    • cmake sollte die Library finden

    Ich habe allerdings Visual Studio noch nie benutzt, daher keine Ahnung, wie man das dort einbindet.



  • @wob
    Super, ich danke dir für deine Ausführungen, das macht einiges klarer.



  • Ich habe allerdings Visual Studio noch nie benutzt, daher keine Ahnung, wie man das dort einbindet.

    Naja Visual Studio unterstützt auch CMake Projekte.
    Bzw. wenn du ganz viel Glück hast dann gibt's ein fertiges Nuget Paket das du einfach dazuklicken und verwenden kannst.

    Ansonsten: weinen. Weil man wieder irgendwie manuell rumbasteln muss.



  • @hustbaer sagte in Handling mit externen Libraries:

    Bzw. wenn du ganz viel Glück hast dann gibt's ein fertiges Nuget Paket das du einfach dazuklicken und verwenden kannst.

    Und da nervt dann daß man pro Architektur/Konfiguration die lib-Verzeichnisse manuell setzten muss 😞



  • @Swordfish sagte in Handling mit externen Libraries:

    @hustbaer sagte in Handling mit externen Libraries:

    Bzw. wenn du ganz viel Glück hast dann gibt's ein fertiges Nuget Paket das du einfach dazuklicken und verwenden kannst.

    Und da nervt dann daß man pro Architektur/Konfiguration die lib-Verzeichnisse manuell setzten muss 😞

    Wie jetzt? Das sollte doch mit einem korrekt gebauten Nuget Paket alles automatisch gehen? Bei dem was ich bisher verwendet habe war das auch so wenn ich mich richtig erinnere. Aber oft hab ich's bis jetzt halt noch nicht verwendet.
    Das erstellen von Nuget Paketen dürfte grausam sein. Das hab' ich noch nie probiert.



  • @hustbaer Bei mir hat es noch nie ohne manuelles Gefummel funktioniert. Letztes Beispiel war Boost 1.72.0 von Sergey Shandar. Include-Directories brav selbst setzten 😞
    Bei allen anderen die ich so über die Zeit versucht habe musste ich immer die Verzeichnisse der Libs in den einzelnen Geschmacksrichtungen selbst raussuchen und eintragen.



  • Wie handled ihr das eigentlich mit zusätzlichen Libs?
    Habt ihr euch dafür einen eigenen Ordner auf C:\ erstellt wo ihr alle reinpackt und dann den Ordner mit euren Projekten verlinkt. oder packt ihr die Libs in das Installationsverzeichnis eure IDE? Oder macht ihr das individuel pro Projekt? Also also einen eigenen "Lib" Ordner in das jeweilige Projekt und dann die Libs rein, die Ihr braucht.

    @wob
    Du hattest vorhin geschrieben das man mit cmake die Libs "Installieren" soll/muss. Was genau bedeutet das?
    In der cmake gui gibt es diesen Button "Install" oder ähnliches nicht.
    Was bedeutet es generell, eine Lib zu installieren? Es gibt ja eigentlich nur header und cpp dateien.



  • @robert123 sagte in Handling mit externen Libraries:

    Habt ihr euch dafür einen eigenen Ordner auf C:\ erstellt wo ihr alle reinpackt und dann den Ordner mit euren Projekten verlinkt.

    Für private, eigene Projekte mach ich das so. Nicht auf C:\ sondern auf F:\ aber ansonsten ja.

    oder packt ihr die Libs in das Installationsverzeichnis eure IDE?

    Never

    Oder macht ihr das individuel pro Projekt? Also also einen eigenen "Lib" Ordner in das jeweilige Projekt und dann die Libs rein, die Ihr braucht.

    Mach ich manchmal wenn ich fremde Projekte baue die bestimmte Dependencies haben.



  • @robert123 sagte in Handling mit externen Libraries:

    Ich dachte immer, ich lade das ding einfach runter, binde die Header-Dateien in mein Projekt und gut, aber das ganze drumherum finde ich, für ungeübte, oder zumindest für leute die cmake nicht kennen (Mich eingeschlossen) echt kompliziert.

    Ich brauchte eine Weile, bis ich mich einigermassen mit CMake zurechtfand. Als nützlich finde ich z.B. die Anweisung message, um Variablen auszulesen. Also so ähnlich wie std::cout << variable; in C++. Ich würde mit minimalen Beispielen anfangen.

    An Introduction to Modern CMake
    CMake Tutorial



  • @robert123 sagte in Handling mit externen Libraries:

    Du hattest vorhin geschrieben das man mit cmake die Libs "Installieren" soll/muss.

    Unter Linux meinte ich damit den "make install"-Schritt. Aber frag mich nicht zu Windows und CMake.



  • Vielen Dank leute.
    Ihr habt mir um einiges weitergeholfen.
    ich werde mich mal etwas intensiver damit beschäftigen.
    @titan99_
    Danke für die Links



  • @hustbaer sagte in Handling mit externen Libraries:

    Nicht auf C:\ sondern auf F:\

    👍
    Ich wollte das auch schreiben, wusste aber nicht, ob das nützlich genug ist 😃



  • @hustbaer sagte in Handling mit externen Libraries:

    Nicht auf C:\ sondern auf F:\

    Natürlich müssen Libraries in einem auf L:\ gemappten Verzeichnis liegen ^^



  • So ärgerlich wie das Einbinden von Libraries in C++ ist finde ich F:\ passender 🙂



  • @hustbaer fugging?



  • @Swordfish Jupp. Bloss denke ich da eher an den alten Namen 🙂


Log in to reply