Warum muss man bereits kompilierte Programme auf anderen Systemen neu kompilieren?



  • Hallo,
    ich bin leider noch nicht so bewandt in Linux,deswegen vlt diese komische Frage:

    Warum gibt es für Linux keine direkt ausführbaren Dateien aus dem Internet zu laden?Also man bekommt ja entweder Pakete oder den Source,den man dann kompilieren muss.

    Jetzt habe ich aber einen "Test" gemacht und ein kleines Testprogramm geschrieben,kompiliert und die daraus entstandene ausführbare Datei auf ein anderes System kopiert,wo ich dieses auch ausführen konnte.

    Woran liegt das denn jetzt,das man die Programme auf seinem eigenen System neu kompilieren muss?Und konnte ich mein Programm nur starten,da es das gleiche System ist?

    Hoffe ihr könnt meine krasse Wissenslücke stopfen.



  • porcupine tree schrieb:

    Warum gibt es für Linux keine direkt ausführbaren Dateien aus dem Internet zu laden?

    doch gibt es. Was glaubst du, was in den RPM Datein drinsteckt? Man hat natürlich auch die Wahl die Programme selber zu bauen, das gibt dem Benutzer mehr Freiheit die Features eines Packetes, die Compiler Optimierungen, usw. selber zu wählen. Aber man muss nicht immer alles selber bauen. Die meisten Packeten haben offiziele RPMs und DEB Dateien (neben den Sourcen) oder die Distributionen selber haben welche.



  • Warum muss man bereits kompilierte Programme auf anderen Systemen neu kompilieren?

    weil die programme auf die richtigen bibliotheken (also mit den richtigen versionen) gelinkt sein müssen

    die alternative wäre statisch linken oder eben die bibliotheken dazugeben. Wenn das jedes Programm machen würde, hätte man ohne ende von bibliotheken doppelt auf dem rechner rumfliegen.



  • Heißt das das mein Programm womöglich auf einem älterem Linux nicht laufen würde?



  • Genau das. Es würde nur dann laufen wenn genau die gleichen libraries installiert wären die du beim compilieren verwendet hast.
    Wie DrGreenthumb schon gesagt hat könntest du als Alternative auch statisch linken oder die libraries dazugeben.
    Aber wenn jeder immer alle verwendeten Libraries installieren würde dann würde ein Linux-system bald so aussehen wie ein Windows PC.
    Hunderte gleichartige .dll's und keiner hätte mehr den Durchblick wozu welche dll gut ist.
    Kurt



  • Und es gibt noch nen Punkt der zu beachten ist ...

    Falls man dem Ersteller nicht traut ... das programm aber trotzdem testen will, kann man sich die sourcen selber anschauen.

    Bei windows unmöglisch, schon allein wegen Software Patenten ....
    Also ne Spielwiese fuer kleine Scherzbolde, die Ihren Programmen immer ein paar vom User nicht soo gewollte funktionen mit aufn weg geben muessen ...

    Unter Unix / Linux undenkbar, als Author wuerdest dann sofort auf ner Black List stehen.
    Kaum ein admin wuerde von nem unbekannten nen binary installieren, auch wenns 3 mal auf die systemarchitektur passen wuerd 🙂

    Nen kleines Progg, sei es noch so nuetzlich, hat unter Linux / Unix keine chance, wenn man an die sourcen nich rankommt ....

    Ciao ...



  • Alles klar,dann weiß ich ja ab sofort bescheid.

    Nur jetzt weiß ich nicht wie ich das machen müsste mit der SQLite DB,ich habe da zwar ein Thema im Datenbank Forum eröffnet,nur scheint vlt das falsche Forum zu sein.

    Ich muss ja davon ausgehen,das nicht jeder die SQLite Libs hat,von daher bräuchte ich eine Alternative.

    Könnte das klappen,das ich die binäries von SQLite mitliefere und dann in dem configure Script überprüfen lasse,ob diese schon installiert sind und wenn nein das er diese dann nutzt?



  • porcupine tree schrieb:

    Ich muss ja davon ausgehen,das nicht jeder die SQLite Libs hat,von daher bräuchte ich eine Alternative.

    Normalerweise schreibt man einfach dazu, dass der Benutzer sqlite braucht und fertig.



  • @porcupine tree
    In der Source Version werden die Abhängigkeiten (Dependencies) im configure Script überprüft. In deinem Fall muss configure dann nach SQLite gucken und den User ansonsten auffordern die passende Version zu installieren. Wie das geht, kannst du im autoconf Manual nachlesen.

    In der Binär Version hängt das von dem benutzten Pakettyp ab. In der Regel kannst du die Abhängigkeiten direkt in das Paket schreiben, so dass klevere Installer wie apt-get einfach SQLite mit installieren, wenn es noch nicht installiert ist.


Anmelden zum Antworten