Подтвердить что ты не робот

Кросс-компиляция кода С++ 11 для малины Pi

Я пытаюсь перенести большой проект, который сильно использует возможности С++ 11, в Raspberry Pi. В проекте используется CMAKE, и я использую crosstool-ng для кросс-компиляции. Я установил зависимости на Pi и скопировал их локально, и мне удалось заставить CMAKE найти их. Некоторые из кода строятся правильно и производят вывод ARM. Однако большая часть кода выходит из строя с запутанным выходом GCC, что я уверен, что это связано с поддержкой C + + 11/template. Например, я получаю такие ошибки:

  • error: 'mutex' in namespace 'std' does not name a type (этот файл включает <thread> и эта ошибка исчезает, если я также включаю <mutex> , а не требование для x86 Ubuntu)

  • error: expected class-name before '{' token (строка до {is: 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
4b9b3361

Ответ 1

Единственное, что я думаю:

  • установить -std=c++0x param в g++ compiler
  • ссылка pthread (-lpthread)
  • вы должны быть уверены, что компилируете для armv6

Ответ 2

Позвольте мне начать с того, что я не уверен в исправлении этой ошибки. Но я видел подобную ошибку при работе с С++ в RPi для большого кода обработки изображений. Я не мог исправить это, установив все зависимости во времени. Вместо этого я переместил весь код в облако, в котором выполнялся код Windows Server Edition/Windows 7, где он хорошо компилировался. Просто обходной идеи, если вы ограничены во времени!