„Alternativen“ für gemeinsam genutzte Bibliotheken? Funktioniert das überhaupt?

„Alternativen“ für gemeinsam genutzte Bibliotheken? Funktioniert das überhaupt?

Ich versuche, eine Verknüpfung mit einer gemeinsam genutzten Bibliothek herzustellen, die mehrere verschiedene Implementierungen hat. Insbesondere bieten Blas, Openblas und Atlas alle dieselbe Binärschnittstelle über die /usr/lib/libblas.soAlternative auf Ubuntu 14.04 (und ein ähnliches, aber nicht identisches Setup auf 12.04). Wenn ich GCC verwende, -lblasscheint der Linker tatsächlich über den alternativen Link zur tatsächlichen Implementierung aufzulösen. Wenn ich also beispielsweise Openblas installiert habe, wird es mit der tatsächlichen Openblas-Binärdatei verknüpft. Wenn ich dann die resultierende ausführbare Datei auf einem System installiere, auf dem Atlas installiert ist, kann der dynamische Linker die Bibliothek nicht laden, da er den alternativen Link nicht sieht.

Gibt es eine Möglichkeit, GCC dazu zu bringen, den „alternativen“ symbolischen Link als DL-Ziel zu verwenden, damit es tatsächlich wie vorgesehen funktioniert update-alternatives?

Antwort1

Die Auflösung symbolischer Links ist hier eine Funktion. Durch die Auflösung libblas.soin libblas.so.3wird die resultierende ausführbare Datei an eine bestimmte So-Version gebunden. (Änderungen an der So-Version, also 3in , libblas.so.3treten auf, wenn sich die binäre Schnittstelle der Bibliothek abwärtsinkompatibel ändert, daher ist dies erwünscht.

Das Problem scheint zu sein, dass Ihr Zielsystem nicht über einen verfügt libblas.so.3, daher empfehle ich Folgendes:

  1. libblas.so.3Stellen Sie sicher, dass Ihre Anwendung , wie bereits geschehen, mit verknüpft ist .
  2. Erstellen Sie auf dem Zielsystem einen symbolischen Link von der eigentlichen libblas.so zum erforderlichen libblas.so.3Namen, sodass dieser symbolische Link im LD_LIBRARY_PATH gefunden wird:

    mkdir ./mylib
    ln -s /usr/lib/libblas.so ./mylib/libblas.so.3
    LD_LIBRARY_PATH=$PWD/mylib:$LD_LIBRARY_PATH ./myexecutable
    

verwandte Informationen