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 to
boost::filesystem::detail::dir_itr_close(void*&, void*&)'
./main.o: In functionboost::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 to
boost::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 functionboost::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 to
boost::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 1Arbeite 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 1Liegt die normalerweise nicht in /usr/lib ?
MfG
Hundefutter
-
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.htmlEs 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 allesMfG
Hundefutter