Weiterreichen von nativen C++ Dll's

  • C++

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Weiterreichen von nativen C++ Dll's

    Hallo Community

    Ich habe eine grundlegende Frage zur Weiterreichung von nativen Cpp-Dll's.

    Wenn ich eine native Cpp-Dll erstelle mit vielen nützlichen Methoden, so kann ich die ja nicht einfach für andere Systeme wie Windows/Linux/Mac weitergeben.

    Anderseits ist es auch nicht immer erwünscht den SourceCode zu übergeben, vor allem wenn kein entsprechendes MSVC oder GCC installiert ist, und somit eine Kompilierung des SourceCodes erst gar nicht möglich ist.

    Ich habe jedoch schon gelesen, dass es Möglichkeit gibt, in dem man quasi eine Art "Installation" macht, und dazu noch gewisse Dateien wie vcruntime.dll etc. mitgibt. Ich denke bei gewissen NuGet wird das bestimmt auch nicht anders gemacht.

    Ziel wäre etwas zu erstellen, ein Programm bzw. dll/so/dylib auf C++ die ich dann weiterreichen kann für
    - Windows x86, x64
    - Linux arm/arm64/x64/muslx64,
    - Mac osx-arm64/x64

    und die dann der Benutzer selber irgendwie umwandeln kann zu einer dll/so/dylib.


    Hat jemand da Erfahrung wie man so was machen kann, oder noch besser gleich ein Beispiel wie so was umgesetzt werden kann.

    Bin für alle Infos offen, und bedanke mich schon mal im voraus.

    Freundliche Grüsse

    exc-jdbi
    Naja, der beste Weg wäre immer noch deinen Code portabel zu machen und im Anschluss auf den jeweiligen Platformen zu kompilieren.
    Es gibt genügend Frameworks und Bibliotheken die dies stark vereinfachen. (Ich z.B. benütze JUCE, welches sich zwar hauptsächlich auf Audio konzentriert, jedoch immer mehr in Richtung all-round wächst)

    Thema Kompilieren:
    Es gibt durchaus Cross-Compiler für Windows, wie gut die jedoch sind erschließt sich mir als fraglich, da ich immer mit VMs gearbeitet habe.
    Außerdem, kann man natürlich auch noch CI/CD/CD empfehlen, da findest du bestimmt etwas günstiges oder teilweise auch Gratis.
    Das würde es dir dann ersparen es für jede Platform selbst zu kompilieren. :)

    Überbrücken würde ich jedoch nicht empfehlen, da Bridging-Lösungen of sehr buggy und ineffizient sein können und manche Features auch gar nicht immer implementiert wurden, daher sollte man schon im vornherein planen für mehrere Systeme zu schreiben.
    Dazu spricht auch, dass andere Architekturen möglicherweise erst gar nicht mit deinem Code funktionieren könnten, da es hier viel zu beachten gibt wie z.B. CPU-Erweiterungen, Memory-Model ect., das spricht auch dafür eher nicht zu überbrücken.
    Wie das für ARM im Endeffekt ist, kann ich nicht sagen, aber ich bin mir sicher es wird einige Unterschiede zu x86 geben.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Guten Morgen @Elanda

    Erst mal danke für die Antwort.

    Ich bewege mich hier auf vollkommen neues Terrain, da ich mich nie um solche Sachen kümmern musste. Bis jetzt habe ich einfach den Code weitergereicht, und um die Kompilierung musste ich mich nie kümmern.

    Es sind vorwiegend sehr viele kleine mathematische Berechnungen die alle als Methode vorhanden sind. Klassen gibt es auch ein paar wenige. Ich hatte einfach bis jetzt noch nicht die Zeit und Lust das Ganze ins C# zu schreiben.

    Ausserdem war ich bis jetzt eher immer auf MSVC (also WIN) ausgerichtet, und sofern das jemand auch noch für andere Architekturen nutzen wollte, musste er/sie die entsprechenden Präprozessor-Definitionen selber kurz anpassen.

    Ich werde mir mal die Begriffen die ich hier finde Durcharbeiten, mal schauen wie weit ich komme.

    Ein Problem habe ich noch. Ich besitze kein Linux. Gibt es trotzdem Möglichkeiten die auf einem Windowsrechner zu testen?

    Freundliche Grüsse

    exc-jdbi

    exc-jdbi schrieb:

    Ein Problem habe ich noch. Ich besitze kein Linux. Gibt es trotzdem Möglichkeiten die auf einem Windowsrechner zu testen?

    Hi, jawoll. Zauberwort heißt WSL (Windows Subsystem for Linux)
    Scott Hanselmann hat ein paar Videos veröffentlicht, wie man ein System mit WSL, Windows Terminal, VS Code einrichten Kann.

    Alternativ gehts natürlich auch mit VirtualBox, VMWare oder einer anderen Virtualisierungslösung, eine Linux-Maschine unter Windows aufzusetzen.
    Das wird dich jetzt warscheinlich etwas Zeit und Kraft kosten, aber der beste Weg etwas für mehrere Platformen und Compiler zu kompilieren wäre ein universales System, welches für jede dieser den selben Aufwand kosten würde.

    Das ist jetzt warscheinlich etwas weit in die Trickkiste gegriffen, da du ja dich, wie gesagt, noch nie um solch ein Unterfangen kümmern musstest; aber wenn du Zeit hast sieh dich mal etwas um mit dem Begriff "CMake".

    Das ist im großen und ganzen nichts anderes als ein Projekt-Generator, welcher auf verschiedene Build-Systeme exportieren kann. Auf Linux wären das z.B. "Makefiles", die du einfach aufrufen kannst und deinen Code kompilieren.
    Auch MSBuild Dateien kann es exportieren.
    Das bedeutet du schreibst ein mal ein Skript für dein C++ Projekt und hast somit die Möglichkeit auf mehreren Platformen zu expandieren.

    Ich verstehe aber wenn das für dich zu weit geht, es ist nicht einfach. Aber C++ ist nicht einfach, CMake macht es dir nur um längen leichter.
    Eine andere möglichkeit wäre es dein Projekt auf VS Code zu erweitern, da Code auch für Linux verfügbar wäre, allerdinfs ist das sehr umständlich und meines Erachtens - nicht zu empfehlen.
    Es ist jedoch alles besser als jedes mal selbst den Compiler eigenhändig auszuführen, da es für jeden Compiler unterschiedlich funktioniert.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------