Frage

So. Ich habe ein Problem, wo ich auf einer Maschine zwei Versionen von GCC haben.
3.4.6 und 4.1

Dies ist aufgrund einiger Abhängigkeitsprobleme mit einem neuen Stück Software. (Benötigt glibc 4.1)

Wenn ich diese neue Software mit den 4.1-Bibliotheken zu verknüpfen Links in Ordnung. Doch wenn es darum geht, die Software ausführen es die Bibliothek nicht finden kann, weil sie in 3.4.6 in meinem LD_LIBRARY_PATH sucht. Wenn ich LD_LIBRARY_PATH auf den 4.1 lib gesetzt bläst sie die Schale nach oben, anderen Dingen unter töten, weil die 3.4.6 Bibliotheken für die verwendet werden.

Es ist ein bisschen von einer Raste 22.

Gibt es eine Möglichkeit, dass ich beim Linken einen absoluten Pfad zu dieser gemeinsam genutzte Bibliothek geben kann, ohne die LD_LIBRARY_PATH mit?

Auf diese Weise kann ich hoffentlich beiden Versionen hat, aber nur 4.1 für diese spezielle Anwendung verwenden?

War es hilfreich?

Lösung

Sie meinen einen absoluten Pfad, der verwendet wird, wenn das Programm gestartet wird, und dass bevorzugt ist, wenn für Bibliotheken suchen? rpath ist genau das. Es wird die Standard-Suchpfad überschreiben und in LD_LIBRARY_PATH gesetzt Sachen. Nur gcc sagen, um es an den Linker passieren:

g++ -Wl,-rpath,/usr/lib/my_4.1 -omy_binary *.cpp

Sie können es Ihnen die Suchverarbeitung (Verwendung help, um es Ihnen mehr Möglichkeiten zu machen geben) machen zeigen:

[js@HOST2 cpp]$ LD_DEBUG=libs ./a.out
  5859:     find library=libc.so.6 [0]; searching
  5859:      search path=/usr/lib/my_4.1/tls/i686/sse2:/usr/lib/my_4.1/tls/i686:
               /usr/lib/my_4.1/tls/sse2:/usr/lib/my_4.1/tls:
               /usr/lib/my_4.1/i686/sse2:/usr/lib/my_4.1/i686:
               /usr/lib/my_4.1/sse2:/usr/lib/my_4.1  (RPATH from file ./a.out)
  5859:       trying file=/usr/lib/my_4.1/tls/i686/sse2/libc.so.6
  5859:       ....
  5859:      search cache=/etc/ld.so.cache
  5859:       trying file=/lib/libc.so.6  (note: found here!)
  5859:

Andere Tipps

nicht wirklich eine Antwort auf Ihre Frage, aber eine alternative Lösung:

Sie sollten in der Lage sein, Ihre Probleme zu beheben, indem Sie Ihre neuen lib Pfad Zugabe /etc/ld.so.conf als root ldconfig und ausgeführt wird.

Können Sie nicht LD_LIBRARY_PATH setzen nur für die Anwendung, die es braucht? D. h statt sie global als exportierte Variable gesetzt, führen Sie das Programm wie

LD_LIBRARY_PATH = / path / to / 4.1 / libs my_executabel

k

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