Boost::filesystem. Dowolna operacja na path powoduj bład.

0

Cześć :)
Piszę w C++ i korzystam z boost::filesystem.
Jeżeli zechcę odwołać się do dowolnej ( poprwanej) ścieżki dostaję zawsze SIGFAULT.
Np.:
std::string s = boost::current_path().string();
I dotyczy to każdej operacji przy odwoływaniu się do ścieżki
Mój system to ubuntu 15.

cmake:

cmake_minimum_required(VERSION 3.2)
project(calibration)
find_package( OpenCV REQUIRED )

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lboost_system -lboost_filesystem -std=c++14")


set(SOURCE_FILES main.cpp)
add_executable(calibration ${SOURCE_FILES} Calibrator.cpp Calibrator.h Settings.cpp Settings.h)
target_link_libraries( calibration ${OpenCV_LIBS} )
0

W experimental::filesystem z cpp17 również?

1

Musiałbyś coś więcej podać na temat tego sigfaulta... gdzie dokładnie błąd wyskakuje?

Sprawdzałeś tylko w swoim projekcie, czy też na minimalnym przykładzie, np..

#include <boost/filesystem.hpp>
#include <iostream>

int main()
{
    std::string s = boost::filesystem::current_path().string();

    std::cout << s << std::endl;
}

Nie mam niestety Linuksa z Boostem pod ręką...

c:\myprogs\cpp>cl bust.cpp /EHsc /MDd /Ic:\myprogs\libs\boost_1_59_0 /link /libpath:c:\myprogs\libs\boost_1_59_0\stage\lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

bust.cpp
Microsoft (R) Incremental Linker Version 9.00.21022.58
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:bust.exe
/libpath:c:\myprogs\libs\boost_1_59_0\stage\lib
bust.obj

c:\myprogs\cpp>bust
c:\myprogs\cpp

c:\myprogs\cpp>
0

bląd wyskakuje w każdej funkcji, która próbuje odwołać się do ścieżki.

( Działa np. zrobienie: boost::path path("poprwana sciezka") )
i potem uzycie tego jak string, np:
ifstream if = fopen( path.string()) // zawieram tu ideę.

Ok. Jak zrobię tak jak Ty to dostają dokłanie w tej linii SIGESV( oznaczyłem)

int main(){
    std::string s = boost::filesystem::current_path().string(); // TO TA LINIA  ( CO RACZEJ OCZYWISTE) 
    return 0;
}

Debugger mówi o tym tak:
Program received signal SIGSEGV, Segmentation fault.
0x00007fffefb57f7e in ?? () from /lib/x86_64-linux-gnu/libc.so.6

Sytuacja jest taka jak tu:
http://stackoverflow.com/questions/25664100/c-all-boost-path-operations-segfault-osx-gcc

Nie rozumiem co tam trzeba zrobić, pojawiają się jakieś nazwy z OS X. Noi własnie, ja nie nam OS X...
Pomóż mi z tym proszę :)

0

Tak jak w zaakceptowanej odpowiedzi, pewnie są nieścisłości z libc++ od clanga i stdlibc++ od gcc.
Pomóc powinno kompilowanie Twojego projektu za pomocą clanga albo zbudowanie (lub pobranie) boosta ustawiajac toolset na g++

Co to sprawdzenia wersji boosta: http://stackoverflow.com/questions/3708706/how-to-determine-the-boost-version-on-a-system#comment3912203_3708718

0

ok. Jak zrobić to?

zbudowanie (lub pobranie) boosta ustawiajac toolset na g++

0

http://www.boost.org/doc/libs/1_59_0/more/getting_started/unix-variants.html#easy-build-and-install
Tu masz jak budować. Wcześniej jest co pobrać i inne rzeczy, ogólnie polecam przeczytać od początku bo długie to nie jest

0

Nie polecam budować, trwa to cholernie długo, poszukaj wersji dla gcc/g++, mogę się temu przyjrzeć jak wrócę z roboty...

0

Dzięki, pomogło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1