2011-01-03 2 views
19

Ich bin eine C++ - ausführbare Datei unter Linux erstellen. Die ausführbare Datei ist in einige Boost-Bibliotheken eingebunden.Fehler beim Laden von gemeinsam genutzten Bibliotheken: libboost_system.so.1.45.0: kann keine gemeinsame Objektdatei öffnen: Keine solche Datei oder Verzeichnis

Dies ist der Ausgang, wenn ich versuche, die binäre auszuführen:

[email protected]:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ./testfgci 
./testfgci: error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory 

ich dann ldd auf dem binären laufen Abhängigkeiten zu überprüfen:

[email protected]:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ldd testfgci 
    linux-gate.so.1 => (0x00380000) 
    libboost_system.so.1.45.0 => not found 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b50000) 
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x005f6000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0099a000) 
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001b3000) 
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00110000) 
    /lib/ld-linux.so.2 (0x00ea2000) 

Ich bin nicht sicher, warum die liboos_system.sl .1.45.0 SO wird nicht gefunden. Ich habe es heute etwas früher erfolgreich gebaut. Kann mir jemand erklären?

+0

Es ist möglich, dass beim Bau, Sie Fahnen an den Compiler für zusätzliche Linker Bibliotheken sind vorbei, aber wenn Sie möchten, das Programm auszuführen, der Boost-Bibliotheken don‘ t existieren in den Linker-Pfaden. Mögliches Duplikat von [Linkproblem in Bibliotheken] (http://stackoverflow.com/questions/4568187/linking-problem-in-libraries) – birryree

+1

Ich fand die Antwort. Ich musste den Pfad zu meinem LD_LIBRARY_PATH hinzufügen und ihn dann exportieren. Die Binärdatei wird ausgeführt, meldet jedoch Fehler (Error System: 9: Bad file descriptor).Ich werde entweder diese Frage ändern müssen, um das zu reflektieren, oder eine neue Frage stellen – skyeagle

Antwort

21

Die Bibliothek kann nicht gefunden werden.

Bibliotheken werden standardmäßig in /lib, /usr/lib und die von /etc/ld.so.conf angegebenen Verzeichnisse gesucht.

Normalerweise befinden sich Systembibliotheken (wie Boost, wenn Sie es über Ihren Paketmanager installiert haben) in /usr/lib, aber das ist wahrscheinlich nicht Ihr Fall.

Wo befinden sich Ihre Boost-Bibliotheken auf Ihrem System? Hast du sie selbst zusammengestellt? In diesem Fall sollten Sie den dynamischen Linker sagen für Ihre Bibliotheken in dem Verzeichnis suchen sie mithilfe der LD_LIBRARY_PATH Umgebungsvariablen sich befinden:

LD_LIBRARY_PATH="your/boost/directory" ./testfgci 

Ich würde Ihnen vorschlagen, Boost-Bibliotheken mit Ihrem Paketmanager zu installieren, trotzdem , das wird dein Leben viel einfacher machen.

15

Ich weiß, dass dies eine alte ist, aber Sie können ldconfig ausführen, um Ihren LDAP-Cache neu zu erstellen. Auf diese Weise müssen Sie LD_LIBRARY_PATH nicht aktualisieren.

+1

Vielen Dank !!! – expert

3

Ich wollte nur eine Notiz für Benutzer von Ubuntu (und Debian, denke ich) hinzufügen: diese Systeme haben eine Sicherheit "Funktion", die LD_LIBRARY_PATH löscht. Dies funktioniert nicht:

In beide /etc/environemnt oder ~/.profile oder ~/.bash_profile:

export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH 

Es wird für ~/.bashrc arbeiten, aber der Weg wird nur für diesen speziell interaktiv Shell eingestellt werden. Das heißt, wenn Sie make von z. emacs oder eclipse, es wird nicht funktionieren, es sei denn, Sie haben emacs aus der Shell und nicht aus dem Launcher gestartet.

Dies ist, was für mich gearbeitet:

echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf 
sudo ldconfig