Es scheint, dass glibc 2.14 eine neue Version von memcpy
eingeführt hat (um bug 12518 zu beheben). Programme, die gegen glibc 2.14+ kompiliert werden, enthalten dann eine dynamische Verbindung zu [email protected]_2.14
, die in älteren Versionen von glibc eindeutig nicht verfügbar ist.Wie erstellt man rückwärtskompatible dynamische Verknüpfungen?
Allerdings enthält Glibc 2.14+ offensichtlich immer noch das alte [email protected]_2.2.5
Symbol für die Abwärtskompatibilität. Ich möchte in der Lage sein, einige Programme so zu kompilieren, dass sie mit älteren glibc-Versionen binär kompatibel sind. Wie würde man ein Programm auf einem System mit glibc 2.14+ kompilieren, so dass es diese alte Symbolversion verwendet? Wenn das Verfahren notwendigerweise Compiler-spezifisch ist, verwende ich GCC (aber es wäre schön zu wissen, wie man es auch auf anderen Compilern macht).
(Nebenbei, ich muss zugeben, weiß nicht viel über versionierte Symbole, wie sie zu produzieren und wie sie zu verwenden sind oder ob sie ELF-spezifisch sind oder als Standard-Teil betrachtet werden sollten von modernen ABIs, und ich habe es nicht geschafft, eine Dokumentation darüber zu finden.Es gibt gute Quellen für Informationen zu diesem Thema?)
Ist das der einzige Weg, es zu tun? Es wäre schön, den Quellcode nicht ändern zu müssen, nur um die Verknüpfung zu ändern. Gibt es keine Möglichkeit, dem Linker mitzuteilen, dass er eine Symbolversion auswählen soll, wenn er die endgültige ausführbare Datei erstellt, anstatt dies auf Quellcodeebene zu tun? – Dolda2000
Danke für den Link, übrigens! – Dolda2000
Das ist ein Weg, um es manuell zu machen, auf der Ebene der Symbolversionierung, was ich dachte, dass Sie danach waren. Der einfachste Weg besteht darin, eine ältere Softwareinstallation mit den alten .a/.so/.h-Dateien zu erhalten und sie zu kompilieren/zu verlinken. – fche