Das kompilierte C ++ - Programm löst aus, dass die Datei für gemeinsam genutzte Objekte auf einem anderen System nicht geöffnet werden kann, obwohl die Datei vorhanden ist

8

Ich habe ein kleines Programm geschrieben, das einige Bibliotheken benötigt, einschließlich libboost_filesystem, libboost_program_options und libcurl.

Ich habe es auf meiner Heimmaschine kompiliert und die Binärdatei zu meinem Computer bei der Arbeit genommen, um es dort zu testen. Aber dort gibt es die folgende Fehlermeldung, wenn ich versuche, das Programm zu starten:

%Vor%

Aber wenn ich nach dieser Datei suche, sehe ich, dass sie existiert in: /usr/lib/libboost_filesystem.so.1.42.0

Habe ich bei der Kompilierung / Verlinkung meines Programms etwas falsch gemacht? Wenn ja, was muss ich tun, damit es auf anderen Maschinen funktioniert?

    
tyrondis 02.11.2010, 13:46
quelle

6 Antworten

7

Versuchen Sie zunächst, ldconfig -p | grep libboost_filesystem.so in einer Konsole auszugeben, um sicherzustellen, dass sich die Bibliothek in Ihrem LDAP-Cache befindet.

Wenn dies nicht der Fall ist, müssen Sie möglicherweise eine Datei mit dem Namen boost.conf zum Verzeichnis /etc/ld.so.conf.d hinzufügen. Diese Datei sollte einen Pfad zu Ihren Boost-Bibliotheken enthalten. Führen Sie dann sudo ldconfig aus, um den LDAP-Cache Ihres Systems zu aktualisieren.

Hoffe, das wird helfen ...

    
ezpresso 02.11.2010 14:35
quelle
1

Sieht so aus, als müssten Sie die Bibliothek statisch verknüpfen. Hier ist eine gute Erklärung. Boost statische Verknüpfung

    
prasanna 02.11.2010 13:53
quelle
1

Haben Sie die gleiche Version der Bibliothek boost_filesystem verlinkt? Je nachdem, wie Sie Ihre Anwendung kompilieren, muss dieselbe Version der Bibliothek vorhanden sein.

Sie können versuchen, zu überprüfen, wonach Ihre Anwendung tatsächlich sucht:

%Vor%

Überprüfen Sie wahrscheinlich auch Ihre LD_LIBRARY_PATH-Umgebungsvariable.

    
Dominik Fretz 02.11.2010 13:57
quelle
1

Könnten Sie sicherstellen, dass /usr/lib/libboost_filesystem.so.1.42.0 keine tote Verbindung ist?

    
Antoine Pelisse 02.11.2010 14:05
quelle
1

Haben Sie die gemeinsamen Binärdateien von boost kompiliert und sie dem Benutzer zur Verfügung gestellt?

Oft kann boost ohne binary / shared verwendet werden. Wenn Sie jedoch zum Beispiel boost :: filesystem verwenden, müssen Sie die Binärdateien als lib oder shared object erstellen und sicherstellen, dass sie für den freigegebenen Binärsuchpfad der ausführbaren Datei verfügbar sind.

Eine Erläuterung und weitere Details finden Sie in der Boost-Dokumentation. Hier ist die Linux-Version: Ссылка

Von dieser Seite:

  

Die meisten Boost-Bibliotheken sind nur als Header verfügbar:   Sie bestehen ausschließlich aus Header-Dateien   enthält Vorlagen und Inline   Funktionen und erfordern keine   separat kompilierte Bibliotheksbinärdateien   oder spezielle Behandlung beim Verknüpfen.

...

  

Die einzigen Boost-Bibliotheken, die es sein müssen   getrennt gebaut sind:

     
  • Boost.Filesystem
  •   
  • Boost.GraphParallel
  •   
  • Boost.IOStreams
  •   
  • Boost.MPI
  •   
  • Boost.ProgramOptions
  •   
  • Boost.Python (siehe   die Boost.Python-Build-Dokumentation   bevor Sie es bauen und installieren)
  •   
  • Boost.Regex
  •   
  • Boost.Serialisierung
  •   
  • Boost.Signale
  •   
  • Boost.System
  •   
  • Boost.Thread
  •   
  • Boost.Wave
  •   
    
Klaim 02.11.2010 13:50
quelle
1

ist / usr / lib in Ihrer Umgebungsvariablen LD_LIBRARY_PATH?

    
frankc 02.11.2010 19:22
quelle

Tags und Links