Problem mit directory_iterator von boost::filesystem



  • Hallo zusammen.

    Spiele gerade ein bissdchen mit boost::filesystem rum und habe leider dabei ein kleines Problem mit dem directory_iterator. Hier erstmal mein Beispiel:

    #include <iostream>
    #include <boost/filesystem.hpp>
    
    int main()
    {
    	boost::filesystem::path p("/usr/include/boost");
    	for(boost::filesystem::directory_iterator dir_it(p);
    		dir_it != boost::filesystem::directory_iterator(); ++dir_it)
    	{
    		std::cout << *dir_it << std::endl;
    	}
    
    	return 0;
    }
    

    Dabei scheint die For-Schleife Probleme zu machen, wenn ich nur einen directroy_iterator deklariere, dann gibt es keine Probleme, nur die Verwendung in der For-Schleife führt zu folgendem Fehler beim Erstellen des Programms:

    Building target: Boost-Filesystem-Test
    Invoking: GCC C++ Linker
    g++ -o"Boost-Filesystem-Test" ./main.o
    ./main.o: In function ~dir\_itr\_imp': /usr/include/boost/filesystem/operations.hpp:809: undefined reference toboost::filesystem::detail::dir_itr_close(void*&, void*&)'
    ./main.o: In function boost::filesystem::basic\_directory\_iterator<boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path\_traits> >::increment()': /usr/include/boost/filesystem/operations.hpp:940: undefined reference toboost::filesystem::detail::dir_itr_increment(void*&, void*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&)'
    ./main.o: In function boost::filesystem::basic\_directory\_iterator<boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path\_traits> >::m\_init(boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)': /usr/include/boost/filesystem/operations.hpp:875: undefined reference toboost::filesystem::detail::not_found_error'
    /usr/include/boost/filesystem/operations.hpp:881: undefined reference to `boost::filesystem::detail::dir_itr_first(void*&, void*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&)'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [Boost-Filesystem-Test] Fehler 1

    Arbeite unter Ubuntu-Linux mit Eclipse (+CDT)...

    Warum könnte er mir die undefinierten Referenzen anmerken? Boost müsste eigentlich vernünftig installiert sein..
    Achja: Unter Win in Visual Studio kompiliert das angegebenen Programm zwar, stürzt dann jedoch einfach ab..
    Habe ich da noch was falsch gemacht?

    MfG
    Hundefutter



  • "Undefined reference" bedeutet, du musst noch die entsprechende Bibliothek hinzulinken.



  • Gut, habe es nach folgender Anleitung gemacht: Link

    Leider gibt er mir nun aus, dass er die Bibliothek nicht findet:

    Building target: Boost-Filesystem-Test
    Invoking: GCC C++ Linker
    g++ -L/usr/lib -o"Boost-Filesystem-Test" ./main.o -lboost_filesystem
    /usr/bin/ld: cannot find -lboost_filesystem
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [Boost-Filesystem-Test] Fehler 1

    Liegt die normalerweise nicht in /usr/lib ?

    MfG
    Hundefutter


  • Administrator

    Die Anleitung um Boost zu bauen, gibt es direkt von Boost:
    http://www.boost.org/doc/libs/1_38_0/more/getting_started/unix-variants.html

    Es kommt ganz darauf an, wo du die Dinger hingebaut hast. Du könntest ja auch selber nachschauen, ob die Libraries sich im entsprechenden Pfad befinden 😉

    Grüssli



  • Alles klar, habe es jetzt geschafft..
    Die haben bei boost zur neuen Version die Namen etwas geändert, daher passte "boost_filesystem", was bei 1.34 noch passte, nicht mehr... Habe es angepasst und jetzt funktioniert alles 🙂

    MfG
    Hundefutter


Anmelden zum Antworten