Forum: PC-Programmierung Linux + libc Versionen


von 900ss (900ss)


Lesenswert?

Hallo,

ich habe mit Entwicklung auf Linux sehr wenig Erfahrung. Hier geht es 
eigentlich sogar um ein embedded System mit ARM-Architektur (armel).

Ich habe ein System hier stehen, wo ein Debian Linux drauf läuft. Es 
bootet mittels U-Boot (internes Flash), der Kernel selbst liegt auch im 
internen Flash. Das Rootfilesystem liegt auf der SD-Karte.

Ich habe eine Crosstoolchain dazu bekommen, die ich unter Linux nutze. 
Wenn ich jetzt eine Anwendung kompilere und diese auf das Target bringe 
und starte, dann gibt es eine Fehlermeldung, dass die libc V2.17 nicht 
gefunden wird (genauen Wortlaut habe ich nicht im Kopf, aber sinngemäß 
stimmt das). Ich habe dann nachgesehen auf dem Target unter 
"/lib/arm-xxxxx" dort liegt ein Link  libc.so.6 der nach libc-2.13.so 
zeigt. Ich nehme jetzt an, dass dort die V2.13 liegt und das Programm 
deshalb nicht startet. Also meine Toolchain hängt eine neuere Toolchain 
an das Programm, als das Target bieten kann.

Ich habe jetzt in den Paketquellen von Debian Jessie die libc V2.19 
gefunden für die armel Architektur. Dann habe ich die Paketquelle aus 
Debian zusätzlich in mein sources.list eingetragen und "apt-get update", 
dann "apt-get -i jessie install libc6" ausgeführt. Es wurde brav alles 
ausgeführt, eine abhängige Pakete wurden auch installiert und mein 
Programm startet jetzt auch fehlerfrei.

Meine Frage: Ist das System insgesammt noch konsistent jetzt oder kann 
ich an anderer Stelle auf Fehler warten, die durch die neuere libc 
Version entstehen?

Weitere Fragen: Wie bekomme ich eine Crosstoolchain, die nur libc V2.13 
(als Beispiel) erwartet oder wovon hängt es ab, welche libc genutzt wird 
von der Crosstoolchain?




Danke für die Hilfe.

von operator (Gast)


Lesenswert?

Womit kompilierst du denn deine Anwendung?
Im Prinzip musst du damit rechnen, dass dein Programm eine weitere Lib 
nicht finden wird, die es benötigt.
Das liegt vermutlich daran, dass dein kompilat die Libs und Headers 
deines Hostrechner verwendet hat, statt des Targets. Da einfach anfangen 
die Libs auszutauschen bringt eher weitere Probleme mit sich.

Ich arbeite mit bitbake und habe mir dadurch ein sysroot des Targets 
erstellen lassen. Wenn du nicht das Ziel-Linux selbst kompilierst, rate 
ich dir das ganze root auf deinen Host zu kopieren (z.B. nach 
/opt/atmelboard/) und dann beim kompilieren dem linker die option 
'--sysroot=/opt/atmelboard/' zu übergeben. Achte darauf, dass dies z.T. 
nur bei neueren compiletools funktioniert (ich glaub cmake ab 3.0 oder 
so, eclipse weiss ich nicht mehr)

von Konrad S. (maybee)


Lesenswert?

900ss D. schrieb:
> wovon hängt es ab, welche libc genutzt wird

Beim Linken wird die Versionsnummer der libc in das Target aufgenommen. 
Deine Crosstoolchain ist neuer als das Zielsystem, umgekehrt wäre es 
kein Problem.

Die Versionsnummer hängt eigentlich an einzelnen Funktionen der libc, 
nicht an der libc als ganzes. Die libc deckt jeweils ältere 
Versionsnummern mit ab, ist also abwärtskompatibel.

von 900ss (900ss)


Lesenswert?

operator schrieb:
> Das liegt vermutlich daran, dass dein kompilat die Libs und Headers
> deines Hostrechner verwendet hat, statt des Targets

Hmmm... weshalb startet dann die Anwendung nach dem Update der Libs auf 
dem Target? ;-)

Mein System baue ich nicht selbst. Ich bekomme das Target-Rootfilesystem 
+ Kernel + die Crosstoolchain geliefert, leider nicht passend 
zueinander.

Konrad S. schrieb:
> Deine Crosstoolchain ist neuer als das Zielsystem, umgekehrt wäre es
> kein Problem.

Ja, das hatte ich auch so verstanden. Deshalb überlege ich ja, mir eine 
andere Crosstoolchain zu bauen oder wenn ich sie fertig bekommen kann, 
eine fertige zu nehmen. Vielleicht kann man ja auch nur die LIBC der 
Crosstoolchain austauschen?

Konrad S. schrieb:
> Die libc deckt jeweils ältere
> Versionsnummern mit ab, ist also abwärtskompatibel

Danke, diese Info wollte ich haben, das System also wird nicht 
inkonsistent dadurch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.