Ich baue mein Programm auf meinem Computer, auf dem libtiff.so -> libtiff.so.5
. Und dann schieben Sie die Builds auf einer anderen Maschine, auf der libtiff.so -> libtiff.so.4
.Wie kann ich eine ältere Version einer gemeinsamen Bibliothek verknüpfen
Zur Laufzeit existiert mein Programm: «Fehler beim Laden von gemeinsam genutzten Bibliotheken: libtiff.so.5
: kann gemeinsame Objektdatei nicht öffnen: Keine solche Datei oder Verzeichnis».
Ich kann die andere Maschine nicht aktualisieren, und ich möchte vermeiden, auf einer virtuellen Maschine zu kompilieren (mit der gleichen Linux-Version als die ausführende Maschine). Daher möchte ich den Compiler zwingen, libtiff.so.4
statt libtiff.so.5
zu verwenden.
Ich habe libtiff.so.4
auf meinem Computer installiert (sowie libtiff.so.5
). Wie kann ich die Verknüpfung mit dieser Version anstelle der neueren Version erzwingen? Ich dachte über das Verschieben der libtiff.so -> libtiff.so.4
, aber ich habe Angst, mein System zu brechen, wenn es die neueste Version benötigt (apt-get purge libtiff5
gibt einen Fehler, weil ein anderes Paket es benötigt).
Ist es möglich, mit einer älteren (installierten) Version einer Bibliothek zu verknüpfen? Wenn ja, wie? Und ist es schädlich, die symbolische Verbindung von libtiff.so
zu der älteren Version zu ändern? Wenn nicht, wird es mein Problem lösen?
Vielleicht mit [LD_PRELOAD] (http://en.wikipedia.org/wiki/Dynamic_linker). – jml
Wie wäre es mit dem vollständigen Pfad zu .so.4 anstelle des üblichen "-liff" beim Verknüpfen? (Sie müssten auch gegen libtiff4-kompatible Header kompilieren). –
Der Compiler kann den Speicherort der gemeinsam genutzten Bibliothek nicht finden. Ich schätze, du musst den PATH auch bestehen. –