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
'-std = C++ 11' forse? –
@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
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