【发布时间】:2014-01-20 17:41:48
【问题描述】:
我正在尝试将一个大量使用 C++11 功能的大型项目移植到 Raspberry Pi。该项目使用 CMAKE,我使用 crosstool-ng 进行交叉编译。我在 Pi 上安装了依赖项并将它们复制到本地,并且我设法让 CMAKE 找到它们。一些代码可以正确构建并产生 ARM 输出。但是,大多数代码都因混淆 GCC 输出而失败,我很确定这与 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)。
谁能指出我正确的方向?
编辑:这是ps 中的文件之一的 g++ 的样子:
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
【问题讨论】:
-
@BartekBanachewicz 我添加了为其中一个文件生成的 g++ 命令。 -std=c++0x 在那里,我认为这与 c++11 相同。
-
好吧,
std::mutex应该在<mutex>(或so it says here)中定义,所以我认为这不是一个错误 - 如果有什么错误是 x86 版本包含你的标题没有要求,但我不记得在多大程度上允许。但是添加它不会破坏x86吗?你有#included<future>给其他人吗? -
@Rup 关于包括的好点...虽然
<thread>包括<mutex>,我认为这在x86 构建中通过。不过,我不介意添加所需的包含作为解决方案。包括<future>并没有解决其他问题。它似乎不喜欢template<typename _Res> class __basic_future : public std::__future_base作为类声明,但没有说为什么不。 -
您解决了这个问题吗?
-
@ChristianRapp 我解决了我在另一个线程中遇到的另一个相关问题,该解决方案也可能适用于此。 stackoverflow.com/questions/16133977/…
标签: cross-compiling raspberry-pi