Wie Boost verwenden?

Kreuzuebersetzer, Diskussion über Änderungen im Tuxbox-CDK und Tuxbox-CVS
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Wie Boost verwenden?

Beitrag von flasher »

Hallo

Gibt es einen Trick den man anwenden muss um Boost zu benutzen?

Ich habe mal zum Test in der zapit.cpp das hier rausgenommen und mit einer Boost-Funktion ersetzt.

Code: Alles auswählen

void cpy(char * from, char * to)
{
	char cmd[256] = "cp -f ";
	strcat(cmd, from);
	strcat(cmd, " ");
	strcat(cmd, to);
	system(cmd);
}
Aus
cpy(BOUQUETS_TMP, BOUQUETS_XML);
wird
boost::filesystem::copy_file(BOUQUETS_TMP, BOUQUETS_XML);

Und natürlich auch:
#include <boost/filesystem/operations.hpp>

Compilen funktioniert damit aber nicht.

zapit.o: In function `mergeBouquets()':
zapit.cpp:(.text+0x1360): undefined reference to `boost::filesystem::path::path(char const*)'
zapit.cpp:(.text+0x136c): undefined reference to `boost::filesystem::path::path(char const*)'
zapit.cpp:(.text+0x1378): undefined reference to `boost::filesystem::copy_file(boost::filesystem::path const&, boost::filesystem::path const&)'

Im SectionsD gehts ja auch nicht anders.
Include, Funktion benutzen, fertig...

Jemand eine Idee?

Gruß
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Wie Boost verwenden?

Beitrag von Houdini »

du musst die boost lib dazulinken
schau dir mal zapit/Makefile.am an.
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: Wie Boost verwenden?

Beitrag von flasher »

Das mit dem Linken habe ich mir auch schon gedacht. Nur verzweifel ich bei der Suche nach der Boostlib.
Bei einem make boostlib im cdk/ wird ja nicht mehr gemacht als die Headerfiles nach cdkroot/lib/boost zu kopieren.

Dein Tipp mal in die Makefile.am zu schauen kann ich auch im Moment nicht nachvollziehen. Was soll ich da finden?

Gruß
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Wie Boost verwenden?

Beitrag von Houdini »

Code: Alles auswählen

Smart Ptr

    Five smart pointer class templates.

    Author(s)
        Greg Colvin, Beman Dawes, Peter Dimov, and Darin Adler
    First Release
        1.23.0
    Standard
        TR1
    Build & Link
        Header only
sieht so aus als ob die smartpointer nur in dem header drin sind du somit nix kompilieren musst.

aber:

Code: Alles auswählen

Filesystem

    The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories.

    Author(s)
        Beman Dawes
    First Release
        1.30.0
    Standard
         
    Build & Link
        Automatic linking
braucht die lib

also boost kompilieren, die boost libs installieren und dann zapit mit den boost libs linken (-lboost oder so in zapit/src/Makefile.am zu zapit_LDADD)
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: Wie Boost verwenden?

Beitrag von flasher »

Irgendwie will das nicht so richtig.

Bauen der .so funktioniert hiermit:

Code: Alles auswählen

$(DEPDIR)/libboostso: bootstrap Archive/boost_1_35_0.tar.bz2 
	( rm -rf boost_1_35_0 || /bin/true ) && bunzip2 -cd Archive/boost_1_35_0.tar.bz2 | TAPE=- tar -x
	cd boost_1_35_0 && \
		$(BUILDENV) \
		./configure \
			--prefix= \
			--libdir=$(targetprefix)/lib \
			--includedir=$(targetprefix)/include && \
		$(MAKE) install
	rm -rf boost_1_35_0
	touch $@
In cdkroot/lib landen auch eine Menge Boost-Libs.
Was mich allerdings etwas stutzig macht sind die Namen der Libs.
Beispiel: libboost_filesystem-gcc42-mt.so
Da stört mich vor allem gcc42. Dies ist die gcc Version des Hostsystems.

Nunja, laut einer Beschreibung die ich gefuden habe wäre -lboost_filesystem genau das was ich brauche.
Also habe ich das Makefile angepasst:

Code: Alles auswählen

zapit_LDADD = \
	$(top_builddir)/lib/libzapitclient.la \
	$(top_builddir)/src/zapci/libzapci.la \
	$(top_builddir)/src/zapost/libzapost.la \
	$(top_builddir)/src/zapsi/libzapsi.la \
	@CONFIGFILE_LIBS@ \
	@CONNECTION_LIBS@ \
	@XML_LIBS@ \
	-lpthread \
	-lboost_filesystem
Leider bekomme ich beim compilen die Meldung, dass die Lib nicht gefunden werden kann.
/home/frank/neutrino-cdk/work/dbox2/cdk/lib/gcc/powerpc-tuxbox-linux-gnu/3.4.6/../../../../powerpc-tuxbox-linux-gnu/bin/ld: cannot find -lboost_filesystem
collect2: ld returned 1 exit status
Auch wenn ich das in boost_filesystem-gcc42-mt ändere gehts nicht. Die Meldung ist immer, dass die Lib nicht gefunden werden kann.

Noch irgendwelche Ideen?

Gruß
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Wie Boost verwenden?

Beitrag von Houdini »

-lboost_filesystem-gcc42-mt

aber boost wurde schon mit dem crossgcc kompiliert?
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Wie Boost verwenden?

Beitrag von Houdini »

in welches Verzeichnis werden denn die boost libs kopiert?
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: Wie Boost verwenden?

Beitrag von flasher »

Houdini hat geschrieben:-lboost_filesystem-gcc42-mt
Das hatte ich wie oben geschrieben ja schon versucht.
Houdini hat geschrieben:aber boost wurde schon mit dem crossgcc kompiliert?
Dachte ich eigentlich aber wenn ich mir das jetzt nochmal in Ruhe ansehe, dann sieht man, dass das nicht der Fall ist.
Die ENVs welche durch $(BUILDENV) erzeugt werden interessieren wohl nicht.
Zum Compilen wird nämlich nicht gcc, cc oder c++ verwendet sondern der Name gcc.compile.c++
Muss ich wohl nochmal genauer die HowTo studieren.
Houdini hat geschrieben:in welches Verzeichnis werden denn die boost libs kopiert?
In dbox/cdkroot/lib

Die Dinger sind also schon am richtigen Platz. Zumindest denke ich das.
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: Wie Boost verwenden?

Beitrag von flasher »

Wenn ich das richtig verstanden habe, dann geht cross-compile mit Boost nicht.
Man kann zwar einen anderen Compiler wählen ist aber auf das Hostsystem beschränkt.

Nunja, muss man sich bei der Benutzung von Boost wohl darauf beschränken Includes zu benutzen die keine Libs brauchen.

Gruß
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Wie Boost verwenden?

Beitrag von Houdini »

das geht bestimmt, du musst wahrscheinlich dafür die jam tools ändern
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: Wie Boost verwenden?

Beitrag von flasher »

Houdini hat geschrieben:das geht bestimmt, du musst wahrscheinlich dafür die jam tools ändern
Sowas in der Art hatte ich mir gedacht und bin dann auf die Suche nach "boost cross compile" gegangen.
Was ich da so gefunden habe hat mich zur Auffassung gebracht, dass es nicht geht.

Was ich noch im Zusammenhang gefunden hatte war: http://scratchbox.org/