2010-05-04 5 views
8

Ich versuche, ein Binärpaket zu erstellen, das auf mehreren Linux-Distributionen ausgeführt werden kann. Es ist derzeit auf Ubuntu 10.04 gebaut, aber es funktioniert nicht auf Ubuntu 8.04 mit dem folgenden Fehler:Was ist der beste Weg, um Software zu erstellen, die nicht die neueste Glibc benötigt?

./test: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./test) 
./test: /usr/lib/libstdc.so.6: version `GLIBC_2.11' not found (required by ./test) 

Was ist der bevorzugte Weg, um dieses Problem zu lösen? Gibt es eine Möglichkeit, eine alte Glibc auf einer neuen Box zu installieren und dagegen zu bauen, oder muss ich auf einer alten Distribution aufbauen? Und wenn ich gegen einen alten glibc baue, wird es an einem neuen Glibc funktionieren?

Oder, alternativ, gibt es nur einige praktische Compiler-Flags oder Pakete, die ich installieren könnte, um das Problem zu lösen?

Antwort

5

Die beste Lösung, die ich gefunden habe, ist, eine virtuelle Maschine zu installieren, auf der Debian stable läuft, und darauf aufzubauen. Debian Stable ist alt genug, dass alle damit gebauten Pakete auf jeder anderen Debian-basierten Distribution wie Ubuntu laufen. Möglicherweise müssen Sie unkritische Fehler umgehen, die in späteren Versionen verschiedener Software behoben wurden, aber nicht in Debian stable zurückportiert wurden.

+0

Ich nehme an, dass das auf einer alten Version von glibc auf neueren Versionen von glibc noch gut funktioniert? – ZorbaTHut

+0

Soweit ich weiß, ja ... lassen Sie mich es so sagen, es ist noch nicht falsch gelaufen. ;-) – ptomato

1

Wenn Sie wirklich sicherstellen möchten, dass es bei jeder neuen Distribution ausgeführt wird, können Sie auch eine statische Verknüpfung mit einer von Ihnen ausgewählten libC in Erwägung ziehen. Allerdings können Sie dann immer noch Probleme bekommen, wenn Sie Funktionen verwenden, die nur von neueren Kernels bereitgestellt werden (neuere Systemaufrufe z. B.).

Verwandte Themen