PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Boost-Lib richtig includieren



SMHRambo
11.07.12, 15:39
Hi,

ich beschäftig mich zwar schon seit ein paar jährchen mit Linux, stosse aber immer wieder auf kleine Probleme. Ich bin eigentlich Debian User muss aber für ein Uni Projekt eine Software für das BeagleBone von BeagleBoard schreiben.

Auf dem Beaglebone läuft Angstrom als Distro, leider gibt es im Paketsystem von Angstrom kein libboost-dev Packet.
Aus diesem Grund habe ich es selber compiliert und installiert.
Leider findet aber mein compiler die includierten Header immer noch nicht .
Ich habe den Installationpfad aber schon hinzugefügt, leider immer noch keinen erfolg.

Ich werde mal in kurzen Schritten erklären was ich schon gemacht habe:
1. Source nach /opt entpackt
2. "./bootstrap.sh" ausgeführt
3. "./b2" ausgeführt
4. "./b2 install" ausgeführt
Wie in der Anleitung von Boost angegeben befinden sich die lib und headers nun in /usr/local/lib und /usr/local/include

Ich entwickel auf dem System per Remote über Netbeans.
dort findet er zwar das include #include</usr/local/include/boost/...>
aber nicht #include<boost/...>

Ich habe in /etc/profile schon "/usr/local:/usr/local/include:/usr/local/lib"
hinzugefügt, leider ohne erfolg, sie tauchen zwar in $PATH von root auf aber nicht in $PATH des Users mit dem ich die Software entwickel.

Auch als ich versucht habe mit root die Software zu compilieren gab es den fehler das er das include #include<boost/...> nicht findet obwohl der nun /usr/local in seiner $PATH hat.

Jemand eine ahnung was ich noch machen muss damit er auch /usr/local includiert.

Hier die Anleitung von Boost:
Anleitung (http://www.boost.org/doc/libs/1_50_0/more/getting_started/unix-variants.html#link-your-program-to-a-boost-library)

Danke schon mal im vorraus

mfg

SMHRambo

m.o.o.
11.07.12, 16:21
Hallo,

welchen Compiler verwendest du denn und wie kompilierst du? Beim gcc kannst du mit -I Verzeichnisse hinzufügen, in denen nach Headern gesucht werden soll.

Gruß
Florian

SMHRambo
11.07.12, 17:09
Das ist ein gcc arm-angstrom-linux-gnueabi compiler.
Also GCC für Arm.

Das mit CFLAGS habe ich schon ausprobiert.
Also export CFLAGS="-I/usr/local/include", bringt aber leider keinen erfolg.

Die genau Compiler ausgabe ist:


g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/src/CBMA180.o.d -o build/Debug/GNU-Linux-x86/src/CBMA180.o src/CBMA180.cpp
In file included from src/CBMA180.cpp:1:0:
src/../include/CBMA180.h:5:28: fatal error: boost/thread.hpp: No such file or directory
compilation terminated.

derguteweka
11.07.12, 18:50
Moin,

Das mit der PATH Variable ist die voellig falsche Baustelle. Die hat nix mit Include-Pfaden zu tun.
die Umgebungsvariable CFLAGS wird evtl. von make und von configure scripten ausgewertet, aber nicht vom gcc.
Im gcc sind ein paar Includepfade fest eincompiliert, welche das sind, siehst du z.B. wenn du mal ein HelloWorld so compilierst:

gcc -v hello.c
Da wird dann bei deinem gcc anscheinend nicht /usr/local/include drinnensein.
Dann bleibt eigentlich nur die von m.o.o. angesprochene Methode, die Pfade mit der -I Option dem gcc mitzugeben. Oder, wenn du deine CFLAGS schon so exportiert hast, eben mit
gcc $CFLAGS hello.c.
Grad' seh' ich auch noch, dass du ja den g++ nimmst, da wuerde sich dann der guten Ordnung halber eher die Variable CXXFLAGS anbieten.

Gruss
WK

undefined
14.07.12, 16:24
Dein Quellcode findet die Header Daten deshalb nicht weil hier von einer Distribution Installation ausgegangen wird. Viele Distributions gehen hin und fügen mehrere boost Version in einen Separaten Ordner.

z.B:
/usr/include/boost/boost-1_49
Compat Verknüpfung /usr/include/boost/boost
ergibt einen CPP INLCUDE Pfad von CPPFLAGS=“-I/usr/include/boost“ und einen include PreProzessor Macro für den CPP Compiler #include <boost/*>

SMHRambo
16.07.12, 17:24
Hi,

sorry das ich mich so lange nicht gemeldet habe.

Ich bin davon ausgegangen, das das Betriebsystem und NetBeans automatisch darin nach den Headers sucht oder ich gegbenenfalls nur noch den genauen Pfad nachpflegen muss.

Auf Debian war das nicht nötig, da habe ich Boost per APT installiert und compiler sowie Netbeans haben alles gefunden.
Auch auf Windows per cygwin war nur das hinzufühen des cygwin Ordners zur Systemvariable nötig und compiler sowie NetBeans haben alles gefunden.

Ich habe nun einfach im Projekt von NetBeans den Pfad zu den Headers im compiler und den Pfad zu den libs im Linker hinzugefügt, sowie die nötigen Libs angegeben und siehe da er compiliert.

Trotzdem stellt sich mir die Frage, was macht cygwin oder das APT-Packet, so das alles automatisch gefunden wird.

Ausserdem musste zusätzlich noch die Variable LD_LIBRARY_PATH anpassen, da er sonst die benötigten Libs beim ausführen nicht gefunden hat.

Wie setze ich die eigentlich am besten global für jeden User fest???

Gruß

SMHRambo