Boost::filesystem -> Debian Anfänger Frage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 06.08.2008 13:29:26

Hallo allerseits,
ich habe mir auf Windows einen Filesearch programmiert.
Da dieser möglichst auch auf Unix Rechnern laufen soll, benutze ich hierfür Boost-Libs.
Auf Windows funktioniert der Code einwandfrei, auf Debian leider nicht :cry:

Leider bin ich ein totaler Debian Anfänger und komme hier absolut nicht weiter!

Ich bin soweit mal den instructions auf der Boost-Seite gefolgt und hoffe ich habe die Header und Libs richtig "installiert".
Im Prinzip hab ich eigentlich die Paketverwaltung genommen und sämtliche Boost-libs etc installed... naja :roll:

Ich poste hier mal den Code und danach die Fehlermeldung und hoffe auf Hilfe:

Code: Alles auswählen

#include<boost/filesystem/operations.hpp>
#include<boost/filesystem.hpp>
#include<boost/utility.hpp>
#include<iostream>
#include<string>
#include <exception>
namespace bfs=boost::filesystem;

// Search for a file with the name 'filename' starting in directory 'dir_path', 
// copy the path of the file in 'pfound' if found, and return true.
// Else return false.
bool find_file(const bfs::path & dir_path, const std::string & file_name, bfs::path & pfound)
{
	if( !exists(dir_path) || !is_directory(dir_path) )
		return false;
	bfs::directory_iterator iter(dir_path), end_iter;
	for(; iter!= end_iter; ++iter)
	{
		try{
			if( bfs::is_directory(*iter) )
			{
				if( find_file(*iter, file_name, pfound) )
					return true;
			}
			else if( iter->leaf() == file_name )
			{
				pfound = *iter;
				std::cout<<pfound<<std::endl;
				return true;
			}
		}
		catch( bfs::filesystem_error &e  ){
		}
	}
	return false;
}

int main() { 
    bfs::path my_path("\\"); 
    bfs::path temp_path(""); 
	if (!find_file(my_path,"main.cpp", temp_path)) {
            std::cout << "Konnte nicht gefunden werden!" << std::endl;
	    }
     
    system("pause"); 
}


main.cpp:2:31: error: boost/filesystem.hpp: Datei oder Verzeichnis nicht gefunden
main.cpp: In function ‘bool find_file(const boost::filesystem::path&, const std::string&, boost ::filesystem::path&)’:
main.cpp:28: error: no match for ‘operator<<’ in ‘std::cout << pfound’
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:67: note: ca ndidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operato r<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _Char T = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:78: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operato r<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char , _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:90: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operato r<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:241: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:264: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:102: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:125: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:157: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:183: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:215: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:288: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:311: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:361: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:335: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:384: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:407: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:430: note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operat or<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<ch ar>]
main.cpp:32: error: expected type-specifier
main.cpp:32: error: expected unqualified-id before ‘&’ token
main.cpp:32: error: expected `)' before ‘&’ token
main.cpp:32: error: expected `{' before ‘&’ token
main.cpp:32: error: ‘e’ was not declared in this scope
main.cpp:32: error: expected `;' before ‘)’ token

Danke für eure Hilfe
mfg
geneticZ

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von Spasswolf » 06.08.2008 13:42:21

Den Header "boost/filesystem.hpp" gibt's erst in Version 1.34 (nicht in Debian etch/stable). Eventuell kannst du den durch andere boost Header aus dem Paket libboost-filesystem-dev ersetzen, siehe

Code: Alles auswählen

dpkg -L libboost-filesystem-dev
Kann deine Suche irgendetwas, dass find nicht kann?

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 06.08.2008 14:05:19

Spasswolf hat geschrieben: Kann deine Suche irgendetwas, dass find nicht kann?
Auch unter Windows laufen? :D

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 06.08.2008 23:29:20

Ja, also danke schonmal soweit!

Code: Alles auswählen

#include<boost/filesystem/operations.hpp>
ist die frühere Headerdatei.

Der Fehler wird nun auch nicht mehr angezeigt, aber leider ja noch jede Menge andere! :cry:

siehe Fehlermeldung oben.
Mit der Exception gibts wohl Probleme und mit ein paar Operatoren wohl auch... :x

Danke für die Hilfe im Voraus
geneticZ

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 08.08.2008 11:35:47

ist sonst nicht so meine Art, ich bitte um Entschuldigung! :roll:
Benötige leider immer noch Hilfe!
Push!

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 10.08.2008 15:55:29

kennt sich hier denn niemand mit C++ auf Unix Systemen aus? :?

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von Spasswolf » 10.08.2008 16:30:01

Wenn ich deinen Quelltext so kompiliere, erhalte ich keine Fehlermeldung.

Code: Alles auswählen

g++ -lboost_filesystem test.cxx

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 11.08.2008 17:49:14

hallo,
erstmal Danke Spasswolf dass du es mal kompiliert hast!
Wenn das bei dir alles einwandfrei funktioniert, dann fehlen wohl wahrscheinlich bei meinem Compiler noch Libs oder irgendwelche Einstellungen stimmen nich oder? :roll:

Kannst du aus meiner Fehlermeldung irgendwas erkennen? Oder jemand anderes?

kryzir
Beiträge: 178
Registriert: 22.09.2007 22:11:33

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von kryzir » 11.08.2008 19:39:03

Code: Alles auswählen

main.cpp:2:31: error: boost/filesystem.hpp: Datei oder Verzeichnis nicht gefunden
Kein Boost installiert.

Einfach boost installieren

Code: Alles auswählen

apt-get install libboost1.35-dev
Und dann einfach Kompilieren und dem Linker die Lib mitgeben:

Code: Alles auswählen

g++ -lboost_filesystem main.cpp

Und dann sollte auch alles laufen, ich arbeite ständig mit boost unter Linux und kann keine Probleme vermelden, darüber hinaus solltest
du dir mal die Boost Seite ansehen http://www.boost.org und vor allem das hier http://www.boost.org/doc/libs/1_35_0/mo ... index.html

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 12.08.2008 09:54:34

Hallo kryzir,
natürlich habe ich lib boost installiert und auch ordentlich verlinkt.
Es gibt keine Boost Fehlermeldung mehr sondern Probleme mit "operator<<" und mit dem Exception Handling!
EDIT: Du hast doch recht denke ich, die Boost Version is veraltet und der operator ist da noch nicht vorhanden!
Danke für die Hilfe
mfg
geneticZ

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 13.08.2008 14:49:36

kryzir hat geschrieben: Einfach boost installieren

Code: Alles auswählen

apt-get install libboost1.35-dev
findet er nich :-(

kryzir
Beiträge: 178
Registriert: 22.09.2007 22:11:33

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von kryzir » 13.08.2008 16:34:09

geneticZ hat geschrieben:
kryzir hat geschrieben: Einfach boost installieren

Code: Alles auswählen

apt-get install libboost1.35-dev
findet er nich :-(
Dann hast du bestimmt etch laufen, das package gibt es jedoch erst in testing bzw sid:

Code: Alles auswählen

http://packages.debian.org/lenny/libboost1.35-dev
Bei etch gibt es dieses package, dieses beinhaltet aber nur die Version 1.33.1-10:

Code: Alles auswählen

http://packages.debian.org/etch/libboost-dev
Das letzte update von boost::filesystem ist jedoch in der 1.34

Code: Alles auswählen

http://www.boost.org/users/history/version_1_34_0

geneticZ
Beiträge: 18
Registriert: 04.07.2008 13:47:38

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von geneticZ » 13.08.2008 18:04:40

Ok, ja ich habe etch am laufen.

Ich versuche gerade nach dem Guide libboost zu installen...

kryzir
Beiträge: 178
Registriert: 22.09.2007 22:11:33

Re: Boost::filesystem -> Debian Anfänger Frage

Beitrag von kryzir » 13.08.2008 21:15:26

Kannst das package auch so ziehen oder lenny in deine Quellen mit aufnehmen dann:

Code: Alles auswählen

apt-get update
apt-get install libboost1.35-dev
Dann lenny Quellen wieder löschen und noch einmal:

Code: Alles auswählen

apt-get update

Antworten