Frage

Wir haben ein Vermächtnis Linker, die libc5, und aufgrund mehrerer Faktoren verwendet haben wir nur die binäre und nicht die Quelle. Ja, Versionskontrolle würde uns aus unserem aktuellen Problem gespeichert ... dass jetzt im Einsatz für unsere volle Werkzeugkette und Produktlinie ist, aber dieses Pferd ist lange vorbei.

Dieser Linker funktioniert auf Linux-Kernel 2.6.24, aber auf 2.6.25 (und 2.6.26) es scheitert mit der Meldung

    Virtual memory exceeded in `new'

Wir hatten ein ähnliches Problem mit den entsprechenden Legacy-Compiler, aber mit einigem stackoverflow.com Antworten und viel Forschung haben entdeckt, dass der Compiler Problem durch die „brk Randomisierung“ in linux-Kernel 2.6.25 verursacht wurde. Die Abhilfe für das ist ein sysctl Vars und eine Umgebung var zu setzen:

    /proc/sys/kernel/randomize_va_space = 0 or 1
    setenv MALLOC_TOP_PAD_ 536870912

Dies ist jedoch nicht die Linker helfen.

Ich habe von der Verwendung „LDD“ festgestellt, dass der Linker mehr gemeinsam genutzte Bibliothek Abhängigkeiten hat (der Compiler hatte nur die libc.so.5):

    libg++.so.27 => /usr/lib/libg++.so.27 (0xb7eca000)
    libstdc++.so.27 => /usr/lib/libstdc++.so.27 (0xb7e99000)
    libm.so.5 => /lib/libm.so.5 (0xb7e90000)
    libc.so.5 => /lib/libc.so.5 (0xb7dd3000)

Und ich habe gelesen, dass ich habe, um die libc5 Version von libg installieren kann ++. So.27. Ich zögere, das zu tun, da ich weiß nicht, ob das wird die neueste libg außer Kraft setzen ++. So.27 und verursachen Probleme für Nicht-libc5 Anwendungen.

Also, ich finde, und die libc5 Version von libg ++ installieren. So.27, oder gibt es eine bessere Möglichkeit, brk Randomisierung zu deaktivieren, oder gibt es einen anderen Unterschied zwischen Kernel 2.6.24 und 2.6.25 dass der Linker verursacht Problem?

Bearbeiten

Siehe dieses für alle Details dieser Suche, und meine endgültigen Lösung.

War es hilfreich?

Lösung

Es ist Ihre Frage nicht beantworten genau, aber in Ihrer Situation, würde ich eine chroot mit bekannter-to-work libc erstellen + libstdc ++ Kombination oder sogar Kernel + libc + libstdc ++ (in diesem Fall benötigen Sie eine virtuelle Maschine, offensichtlich). Auf diese Weise können Sie die Dinge versuchen, relativ einfach, ohne etwas anderes zu stören.

Der beste Weg, kompatibel mit einer alten Bibliothek zu sein, ist diese alte Bibliothek zu verwenden, nachdem alle, und da es „nur“ ein Toolchain Problem, indem eine Art Gefängnis / chroot / virtuelle Maschine soll nicht zu viel von ein Problem?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top