Linux und SDCC 4.4.0

OP #7584220

Nach 3 Tagen bin ich jetzt (fast) schon am Aufgeben.

Folgendes Problem stellt sich mir: Wenn ich an meinem Desktop-PC oder Notebook den SDCC in der Version 4.4.0 verwenden möchte gibt es überhaupt keine Probleme (beides sind XUbuntu Ver.22 Rechner).

Auf meinem Bastelrechner mit dem ich Mikrocontroller programmiere habe ich einen sehr spartanischen Rechner (4 GB Ram) mit einem sehr schlanken und sehr stark modifiziertem Porteus Live-Linux, bassierend auf Slackware 14.2 (Linux Kernel 4.16.3).

Die höchste Version die ich mit SDCC hier an das Laufen bekomme ist 4.1.0. Jede höhere Version scheitert am Nichtvorhandensein von GLIBC_2.34.

Bei Slackware finde ich keine Version 2.34 (das höchste der Gefühle ist hier 2.33)! Also denke ich mir (fälschlicherweise): Ich bin ja nicht blöd, übersetze ich mir halt eine libc.so.6.0 selbst und compiliere die Sourcen, GCC Version 4.3 (irgendwann in der Nacht hab ich das einfach laufen lassen, weil das ewig gedauert hat).

Insgesamt war das allerdings keine so gute Idee, denn nach dem Installieren hat jeder eingetippte Befehl einen Segmentation Fault hervorgebracht (und er konnte danach auch nicht mehr booten, weshalb da dann "reparieren" erst einmal angesagt war).

Hat irgendwer eine Idee, wie man den SDCC 4.4.0 auf einem Kernel 4.16.3 zum Laufen bringen kann? Sagt nicht, von einem anderen Rechner die libc kopieren: wider besserem Wissen habe ich das natürlich auch schon ausprobiert und hat nur zu Segmentation fault geführt.

OP

Dergute W. schrieb:

An der libc eines Rechners rumdoktoren ist fast immer eine ganz schlechte Idee.

:-) weiß ich und habe das auch nur ungern ausprobiert und auch erst nachdem ich das gesichert hatte um den Ursprungszustand wiederherzustellen.

Dergute W. schrieb:

In meinem jugendlichen Leichtsinn wuerd' ich mal empfehlen, den SDCC auf dem Zielsystem selber zu compilieren.

Noch mehr Smile: Da hatte ich natürlich zuvor auch schon versucht gehabt und erst einmal geflucht, weil zum selber compilieren es eine Bibliothek "boost" benötigt, die seinerseits wieder Ewigkeiten braucht bis die übersetzt ist.

Dann ließ sich SDCC wegen fehlender GLIBC_2.33 dennoch nicht übersetzen...

Moin,

Weiss nicht, wie hilfreich das jetzt fuer dich ist, aber ich hab hier einen Rechner mit ungefaehr einem LinuxFromScratch-7.6 drauf. Kernel: 3.15.1 glibc: 2.19 gcc: 4.9.0 boost:1.55.0

Und auf dem Ding hat sich grad' der sdcc-4.4.0-rc2 bauen lassen (configure & make ohne fehler durchgelaufen). Nur pic14- und pic16-ports musste ich disablen, irgendwelche gpu-tools haben da gefehlt, iirc. Wenn ich da mal stumpf ein sdcc hello.c laufen lasse, kommt ein Fehler: _putchar referenced by module vprintf Also prinzipiell scheint mir der sdcc auch mit aelteren libcs zu laufen.

Gruss WK

Ralph S. schrieb:

Hat irgendwer eine Idee, wie man den SDCC 4.4.0 auf einem Kernel 4.16.3 zum Laufen bringen kann?

Der Kernel wird nicht das Problem sein.

Sagt nicht, von einem anderen Rechner die libc kopieren: wider besserem Wissen habe ich das natürlich auch schon ausprobiert und hat nur zu Segmentation fault geführt.

Es gibt durchaus eine Möglichkeit dazu: Sämtliche Libraries, die das Programm benötigt, auf den Zielrechner in irgendein Unterverzeichnis kopieren. Insbesondere ist dabei die ld-linux.so.* wichtig. Das ist der dynamische Linker. Anders, als man vielleicht vermutet, kann man denn auch direkt als Programm ausführen. Dann setzt du den LD_LIBRARY_PATH auf das Verzeichnis und startest das Programm über die kopierte ld-linux.so. Ich weiß allerdings nicht, ob das geht, wenn das Programm selbst wieder andere Programme startet, was sdcc vermutlich macht. Eine andere Möglichkeit wäre, den Compiler in einem Docker-Container auszuführen.

OP

Dergute W. schrieb:

Kernel: 3.15.1 glibc: 2.19 gcc: 4.9.0 boost:1.55.0

Okay, dann werde ich das noch einmal versuchen. Mein glibc ist neuer, okay, der GCC ist 4.3 (aber den kann ich auch mal erneuern), boost weiß ich nicht (und ich komme am Wochenende auch leider nicht an den Rechner ran).

Aaaaber: jetzt weiß ich, dass das geht !

OP

Dergute W. schrieb:

Wenn ich da mal stumpf ein sdcc hello.c laufen lasse, kommt ein Fehler: _putchar referenced by module vprintf Also

Ich habe jetzt von meinem USB Stick ein Setup laufen lassen, das dem des Bastelrechners entspricht, mit GCC 7.3 und Boost übersetzen lassen. Sdcc läuft tatsächlich, aber der Linker macht noch Probleme mit undefined globals __startup...

Dem werde ich bestimmt auch noch auf die Spur kommen...

Moin,

Ralph S. schrieb:

aber der Linker macht noch Probleme mit undefined globals __startup...

Ja, aber sowas hat mit dem Startupzeugs fuer C auf dem sdcc-target zu tun. Und nix mit der Version der glibc auf dem Host vs. erwarteter Version von woanders kompilierter Software, was du vorher hattest.

Harry L. schrieb:

Man kann alternative shared Librarys auch einfach ins selbe Verzeichnis wie das Executable legen; dann werden die statt der systemweiten Librarys genutzt.

Huuuh - da will ich ja mal stark hoffen, dass das bei vernuenftigen Betriebssystemen nicht so ootb funktioniert...

Gruss WK

OP

Dergute W. schrieb:

Ja, aber sowas hat mit dem Startupzeugs fuer C auf dem sdcc-target zu tun. Und nix mit der Version der glibc auf dem Host vs. erwarteter Version von woanders kompilierter Software, was du vorher hattest.

Smile, weiss ich doch.. deswegen hab ich ja geschrieben ddass ich dem auf die Spur kommen werde

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.