Sind libc-Versionen an Kernel-Versionen gebunden?


8

Nachdem ich die Antworten auf meine vorherige Frage gelesen habe , bin ich zu dem Schluss gekommen, dass eine Antwort auf die folgende Frage das ist, wonach ich tatsächlich gesucht habe:

Benötigt eine bestimmte Version des Kernels eine bestimmte Version von libc, um ordnungsgemäß ausgeführt zu werden?

Grundsätzlich ist mein Problem darauf zurückzuführen, dass ich eine Anwendung auf meinem 12.04-Ubuntu erstellt und versucht habe, sie auf 8.04 auszuführen. Ich habe seitdem aus diesem und anderen Stackexchange-Foren gelernt, dass es die Abwärtskompatibilität von libc ist, die diese Probleme verursacht. Daher versuche ich vielleicht naiv, dieselbe Version von libc zu erstellen, die auf meinem Ziel vorhanden ist, und dann beim Erstellen der Anwendung auf meinem Host eine Verknüpfung dazu herzustellen. In einer idealen Welt, in der ich dies auf den Host kopiere und mit der "richtigen" Bibliothek verknüpft bin, sollte es funktionieren (zumindest in meinem Kopf). Ich konnte überhaupt keine Möglichkeit finden, eine ältere Bibliothek auf meinem System zu installieren, und habe mich gefragt, ob jede Version eng an eine Kernelversion gebunden ist, daher die obige Frage.


If you're building GCC yourself from source, you can configure the build to install in its own prefix (rather than /usr).Von der Antwort auf Ihre andere Frage sollte das Problem gelöst werden.
RobotHumans

Könnten Sie die Bibliotheken nicht statisch verknüpfen und so libc-Probleme insgesamt vermeiden?
Scott Severance

Ich habe darüber nachgedacht, aber aufgrund der Recherchen und Fragen, die ich gestellt habe, habe ich das allgemeine Gefühl, dass dies eine schlechte Idee ist.
Mathematiker

Ich bin kein C-Programmierer, aber ich verstehe, dass der Hauptnachteil beim Kompilieren der Bibliotheken eine größere ausführbare Datei ist. Auf diese Weise bieten proprietäre Softwareanbieter wie Skype und Opera häufig Linux-Pakete an.
Scott Severance

Antworten:


4

Benötigt eine bestimmte Version des Kernels eine bestimmte Version von libc, um ordnungsgemäß ausgeführt zu werden?

Ja, es sei denn, Sie erstellen den Kernel selbst aus dem Quellcode mit Ihrer bevorzugten libc-Version. Die Ubuntu-Kernel basieren auf der LTS-Version vor der Zielversion, daher waren die "neuesten" Ubuntu-Kernel, die mit 8.04 libc kompatibel sind, die für Ubuntu 9.10.


6

Sie sind in gewisser Weise miteinander verbunden.

  • Der Kernel, auf dem Sie ausgeführt werden, wurde mit einer bestimmten libc kompiliert.
  • Die libc, die Sie haben, wurde kompiliert, um nur Kernel über einer bestimmten Version zu unterstützen.

Wenn Sie also die Kernel-Pakete und libc-Pakete von den Ubuntu-Repos installieren, anstatt sie selbst zu kompilieren, stecken Sie im obigen Dilemma.

Was libc betrifft, besteht eine Möglichkeit, das, was Sie vorschlagen, darin, den 12.04-Kernel aus dem Quellcode am 8.04 zu kompilieren und ihn so mit dem 8.04-libc zu verknüpfen. Dann verwenden Sie diesen benutzerdefinierten Kernel, um 12.04 zu starten, auf dem Sie die libc-Version von 8.04 kompilieren, ebenfalls aus dem Quellcode. Sie installieren das und Ihre Anwendungen sollten dieselbe alte 8.04-Bibliothek verwenden.

Ich gehe davon aus, dass Sie auch wissen, dass andere 12.04-Bibliotheken, mit denen Ihre Anwendung verknüpft ist, in 8.04 möglicherweise nicht verfügbar sind. Sie müssen sie daher auch aus dem Quellcode kompilieren ...

Zusammenfassend ist es am besten, nur am 8.04 zu kompilieren .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.