2013-04-14 15 views
11

Sto provando a portare un grande progetto, che fa un uso pesante delle funzionalità di C++ 11, al Raspberry Pi. Il progetto utilizza CMAKE e sto usando crosstool-ng per la cross-compiling. Ho installato le dipendenze sul Pi e le ho copiate localmente, e sono riuscito a ottenere CMAKE per trovarle. Parte del codice viene compilata correttamente e genera l'output ARM. Tuttavia, la maggior parte del codice fallisce con l'output GCC confuso che sono abbastanza sicuro abbia a che fare con il supporto di C++ 11/template. Ad esempio, ricevo errori come questo:Cross-compiling codice C++ 11 per Raspberry Pi

  • error: 'mutex' in namespace 'std' does not name a type (il file in questione include <filo> e questo errore va via se includo anche <mutex>, non è un requisito su x86 Ubuntu)

  • error: expected class-name before '{' token (la linea prima {è: template<typename _Res> class __basic_future : public std::__future_base)

  • error: '__result_type' does not name a type (questo probabilmente avviene a causa del errore di cui sopra)

Questi errori sembrano come se il compilatore ARM g ++ non piacesse molto ai template. La versione di g ++ in uso è arm-unknown-linux-gnueabi-g++ (crosstool-NG 1.18.0) 4.7.3 20130102 (prerelease).

Qualcuno può indicarmi la giusta direzione?

Edit: Ecco cosa g ++ sembra per uno dei file in ps:

arm-unknown-linux-gnueabi-g++ -DprojectCore_EXPORTS -fPIC 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/freetype2 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/glib-2.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/lib/arm-linux-gnueabihf/glib-2.0/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/gdk-pixbuf-2.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/gtk-2.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/lib/arm-linux-gnueabihf/gtk-2.0/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/cairo 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/pango-1.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/atk-1.0 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/local/include 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/eigen3 
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/flann 
-I/home/sagar/workspace/project/include -std=c++0x -Wall -Werror -Wno-deprecated -fPIC -g -O4 
-o CMakeFiles/projectCore.dir/src/project/Core/Memory/Array2D.C.o -c /home/sagar/workspace/project/src/project/Core/Memory/Array2D.C 
+0

'-std = C++ 11' forse? –

+0

@BartekBanachewicz Ho aggiunto il comando g ++ che è stato generato per uno dei file. -std = C++ 0x è in là, e penso che questo sia lo stesso di C++ 11 a questo punto. – sagargp

+1

Bene 'std :: mutex' dovrebbe essere definito in' '(o [così dice qui] (http://en.cppreference.com/w/cpp/thread/mutex)) quindi non lo faccio pensate che sia un bug - semmai il bug è che la versione x86 include le intestazioni che non avete richiesto, ma non ricordo in quale misura sia comunque consentito. Ma aggiungendolo non si romperà x86 vero? Hai incluso "" per gli altri? – Rup

risposta

2

Le uniche cose che penso sono:

  • impostato -std=c++0x param per g++ compiler
  • collegamento pthread (-lpthread)
  • devi essere sicuro che stai compilando per armv6
1

Vorrei iniziare dicendo che non sono sicuro della correzione di questo errore. Ma avevo visto un errore simile mentre lavoravo con C++ in RPi per un grande codice di elaborazione delle immagini. Non ho potuto aggiustarlo installando tutte le dipendenze in tempo. Invece ho finito per spostare l'intero codice su cloud che stava eseguendo il codice Windows Server Edition/Windows 7 dove è stato compilato correttamente. Solo un'idea di soluzione se hai tempo limitato!