2017-07-20 2 views
1

Ich habe vor kurzem meine Boost-Bibliothek auf 1,63 Version aktualisiert. Aber eine Funktion, boost: filesystem: exists funktioniert jetzt nicht. Vorher mit boost Bibliothek 1.54 war der Code in Ordnung. Stattdessen geht jetzt ein Segmentierungsfehler ein. :Segmentierungsfehler von Boost (Boost: Dateisystem: existiert)

#include <boost/filesystem.hpp> 

namespace fs=boost::filesystem; 
using namespace std; 

int main() 
{ 
    fs::path selfpath=fs::system_complete("Testa2.cpp"); 
    cout<<selfpath<<endl; 

    if(fs::exists(selfpath.c_str())) 
    cout<<"Never here"<<endl; 

und es kompiliert mit:

g++ -std=c++11 Testa5.cpp -lboost_filesystem -lboost_system 

aber existiert geht in Segmentation Fault.

Wie ist es möglich? Wie kann ich es beheben?

(Ich bin auf Ubuntu) (I installated von hier steigern: http://www.linuxfromscratch.org/blfs/view/cvs/general/boost.html)

+0

Sollte Ihre Aussage: fs :: path selfpath = fs :: system_complete ("Testa : Eigentlich sollte geschrieben werden als: fs :: path selfpath = fs :: system_complete ("Testa:"); ??? Es sollte fast keine Probleme mit Boost geben. Und Sie behaupten, dass genau diese Anweisung mit g ++ auf demselben Computer funktioniert ? –

+0

@Dr t Du hast rason, ich liege falsch, jetzt modifiziere ich die Frage – Umbert

+1

Es funktioniert hier online: http://coliru.stacked-crooked.com/a/606b19bec055ba5b (mit Programmoptionen für die Analyse der Befehlszeile) – sehe

Antwort

0

Sie Binärdateien installiert nicht für die (Ubuntu) Verteilung gebaut Sie verwenden.

Verwenden Sie lieber die Distro-spezifischen Pakete oder kompilieren Sie aus der Quelle, verwenden Sie die gleiche Compiler-Version und die Flags, die Sie beim Kompilieren Ihres Programms verwenden.

Alles läuft sonst in ABI Fragen, die Undefined Behaviour ist

Also, auf Ubuntu installieren in der Regel Schub wie

sudo apt-get install libboost-all-dev 
+0

Danke für die Antwort, aber das Problem war ein anderer. Die neue Boost-Bibliothek wurde in/usr/lib installiert und die alte bleibt in/usr/lib/x86_64-linux-gnu und der symbolische Link .so verweist immer noch auf die alte Version. Ich änderte den Link, indem ich auf die richtige Bibliothek und ich entschied. Aber danke – Umbert

+1

Das ist im Grunde das gleiche Problem richtig: Sie laufen gegen eine andere Version als kompiliert in -> ABI Unterschied. Die manuelle Korrektur von Symlinks ist ein Beweis dafür, dass Sie die Paketverwaltung Ihrer Distribution unterlaufen haben. Die Symlinks sollten automatisch sein – sehe

Verwandte Themen