Ich baue Code, der ein gemeinsames Objekt (.so) sein muss.Kompiliere ein gemeinsames Objekt (.so) mit statischem Glibc
Das Problem, dass die libc auf meiner Baumaschine möglicherweise neuer als die veröffentlichten Maschinen ist, also möchte ich mit ihr statisch verknüpfen, um Kompatibilitätsprobleme zu vermeiden. (Mein Programm verwendet memcpy, was offensichtlich eine GLIBC_2.14-Sache ist, wenn es so niedrig wie 2,5 gehen kann).
Die Kompilierung mit -shared und -static funktioniert nicht, da crtbeginT.o nicht mit -fPIC kompiliert wurde.
Edit: Wahrscheinlich nicht ein Duplikat von GCC linking libc static and some other library dynamically, revisited? seit dieser Frage über die Hauptelf sprechen libc statisch und dies ist über ein gemeinsames Objekt libc statisch verknüpfen.
Könnten Sie Ihre gcc Optionen hinterlassen bitte. – KimKulling
Es macht keinen Sinn, das zu tun, was du beschreibst, weil du am Ende eine Anwendung haben würdest, die deine Bibliothek mit zwei verschiedenen Versionen von glibc gleichzeitig nutzt - eine über deine Bibliothek und eine andere für die eigene direkte glibc Abhängigkeiten. Das stellt genau die Art von Problem dar (ich nehme an), das du vermeiden willst, so dass du nichts gewinnst, indem du so vorgehst, wie du es vorschlägst. –
Aus Erfahrung werden Sie, weit, viel weniger Zeit dafür aufwenden, indem Sie z. eine VirtualBox-VM mit der erforderlichen alten Distribution/Version mit dem älteren glibc, der zu Ihren "publishing" -Maschinen passt und Ihre Releases auf dieser VM erstellt (Sie können immer noch auf Ihrer neueren Entwicklungsdistribution entwickeln/testen), als Sie versuchen, die glibc-Kompatibilität zu bekämpfen Probleme. Dies umso mehr, wenn Sie eine gemeinsam genutzte Bibliothek erstellen, die Teile einer neueren glibc enthält, die in einen Prozess geladen wird, der mit einer älteren glibc verknüpft ist. Tu das einfach nicht. – nos