2017-07-20 12 views
1

私は最近、boostライブラリを1.63バージョンにアップグレードしました。しかし、機能、boost:filesystem:existsは動作しません。ブーストライブラリ1.54以前はコードが大丈夫でした。代わりに現在はセグメンテーション違反になります。 :boostからのセグメンテーションフォールト(boost:ファイルシステム:あり)

#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; 

、それがでコンパイル:セグメンテーションフォールトで行く

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

が、存在します。

どうすれば可能ですか? どうすれば修正できますか?

(私はUbuntuの上でだ) (私はここから後押しinstallated: http://www.linuxfromscratch.org/blfs/view/cvs/general/boost.html)あなたが使用している(Ubuntuの)配布のために構築されていないバイナリをインストールし

+0

のようにブーストをインストールし、あなたの文は、必要があります:FS ::パスselfpathの= fsを:: system_complete(「テスタ:実際には次のように書かれています:fs :: path selfpath = fs :: system_complete( "Testa:"); ??? Boostにはほとんど問題はないはずです。 ? –

+0

@Dr tあなたはrasonを持っています、私は間違っています。今質問を変更します – Umbert

+1

これはオンラインでここで動作します:http://coliru.stacked-crooked.com/a/606b19bec055ba5b(コマンドラインの解析にprogram_optionsを使用) – sehe

答えて

0

ディストリビューション固有のパッケージを使用するか、プログラムのコンパイル時に使用するのと同じコンパイラのバージョンとフラグを使用してソースからコンパイルすることを推奨します。何か他のものがそうUndefined Behaviour

であるABIの問題、に走る

、Ubuntuの上で、通常

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

答えをいただきありがとうございますが、問題は別のものでした。新しいブーストライブラリは/ usr/libにインストールされ、古いものは/ usr/lib/x86_64-linux-gnuに残り、.soシンボリックリンクは引き続き古いバージョンを参照していました。私は右のライブラリにポイントを行ってリンクを変更し、私は解決しました。しかし、ありがとう – Umbert

+1

それは基本的に同じ問題です。あなたはコンパイルされたバージョンとは異なるバージョンで実行されます。手動でシンボリックリンクを修正することは、あなたのディストリビューションのパッケージ管理を妨害したことを証明するものです。シンボリックリンクは自動でなければなりません – sehe

関連する問題