2013-04-14 151 views
11

我試圖將一個大型項目,這使得大量使用C++ 11功能,到樹莓派。該項目使用CMAKE,我正在使用crosstool-ng進行交叉編譯。我在Pi上安裝了依賴關係並將它們複製到本地,並且我設法讓CMAKE找到它們。一些代碼正確構建並生成ARM輸出。但是,大部分代碼都會因混亂的GCC輸出而失敗,我相當肯定與C++ 11 /模板支持有關。例如,我得到的錯誤是這樣的:交叉編譯Raspberry Pi的C++ 11代碼

  • error: 'mutex' in namespace 'std' does not name a type(有問題的文件包括<線程>這個錯誤消失,如果我還包括<互斥>,而不是在x86 Ubuntu的一個要求)

  • error: expected class-name before '{' token(前行{是:template<typename _Res> class __basic_future : public std::__future_base

  • error: '__result_type' does not name a type(這可能發生,因爲上述錯誤的)

這些錯誤看起來像ARM g ++編譯器不太喜歡模板。正在使用的g ++版本是arm-unknown-linux-gnueabi-g++ (crosstool-NG 1.18.0) 4.7.3 20130102 (prerelease)

任何人都可以指向正確的方向嗎?

編輯:這裏是G ++看起來像在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'也許? –

+0

@BartekBanachewicz我添加了爲其中一個文件生成的g ++命令。 -std = C++ 0x就在那裏,我認爲這和C++ 11在這一點上是一樣的。 – sagargp

+1

'std :: mutex'應該在''(或[因此它在這裏說](http://en.cppreference.com/w/cpp/thread/mutex))中定義,所以我不認爲這是一個錯誤 - 如果有什麼錯誤的是,x86版本包含你沒有要求的頭文件,但我不記得在什麼程度上允許。但是加入它不會破壞x86嗎?你有#包括''爲其他? – Rup

回答

2

唯一的東西,我認爲是:

  • 設置-std=c++0x參數去g++ compiler
  • 環節並行線程( -lpthread
  • 您必須確定您正在編譯armv6
1

讓我開始說我不確定這個錯誤的修復。但是我在使用C++在RPi中處理大圖像處理代碼時遇到過類似的錯誤。我無法及時安裝所有的依賴關係。相反,我最終將整個代碼移動到運行windows server edition/windows 7代碼的雲中,編譯得很好。如果你有時間限制,只是解決方法的想法!