首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用g++arm-linux-gnueabi时包含C++系统头的正确方法?

在使用g++arm-linux-gnueabi时包含C++系统头的正确方法?
EN

Stack Overflow用户
提问于 2014-09-28 20:54:49
回答 1查看 5.5K关注 0票数 8

我正在Ubuntu14.04上编译一个库,安装了gcc-arm-linux-gnueabig++-arm-linux-gnueabi包。

编译在它遇到的第一个源文件上失败:

代码语言:javascript
复制
/usr/bin/arm-linux-gnueabi-g++ -DNDEBUG -g2 -Os -pipe -fPIC -I. -DCRYPTOPP_DISABLE_ASM 
-mcpu=cortex-m3 -mthumb --sysroot=/usr/arm-linux-gnueabi -c 3way.cpp
In file included from cryptlib.h:83:0,
                 from seckey.h:8,
                 from 3way.h:7,
                 from 3way.cpp:5:
stdcpp.h:14:18: fatal error: memory: No such file or directory
compilation terminated.

当我执行find时,我看到C++头位于:

代码语言:javascript
复制
$ find /usr -name memory
/usr/arm-linux-gnueabi/include/c++/4.7.3/tr1/memory
/usr/arm-linux-gnueabi/include/c++/4.7.3/memory
/usr/arm-linux-gnueabi/include/c++/4.7.3/ext/memory
...

/usr/arm-linux-gnueabi已经作为SYSROOT提供了

代码语言:javascript
复制
$ ls /usr/arm-linux-gnueabi
bin  include  lib

添加isysroot无助于:

代码语言:javascript
复制
/usr/bin/arm-linux-gnueabi-g++ -DNDEBUG -g2 -Os -pipe -fPIC -DCRYPTOPP_DISABLE_ASM
-mcpu=cortex-m3 -mthumb -isysroot=/usr/arm-linux-gnueabi/include/c++/4.7.3
--sysroot=/usr/arm-linux-gnueabi -c 3way.cpp
In file included from cryptlib.h:83:0,
                 from seckey.h:8,
                 from 3way.h:7,
                 from 3way.cpp:5:
stdcpp.h:14:18: fatal error: memory: No such file or directory

我已经交叉编译了其他平台(如安卓、iOS和Windows )的库,所以我对需要做什么有一个很好的想法。然而,这是我第一次使用arm-linux-gnueabi

在使用C++包时,包含g++-arm-linux-gnueabi头和库的正确方法是什么?

关联:难道spec文件不应该处理这个问题吗?

编辑:下面是与-v相关的信息。这些内置的小径看起来不健康。看起来,工具链试图形成通往C++头的路径,但它做得不太好:

代码语言:javascript
复制
/usr/bin/arm-linux-gnueabi-g++ -v -DNDEBUG -g2 -Os -pipe -fPIC -DCRYPTOPP_DISABLE_ASM 
-mcpu=cortex-m3 -mthumb --sysroot=/usr/arm-linux-gnueabi -c 3way.cpp

...
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3"
ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi/sf"
ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/backward"
ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/local/include/arm-linux-gnueabi"
ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include/arm-linux-gnueabi"
ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include
 /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include-fixed
 /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/include
End of search list.
GNU C++ (Ubuntu/Linaro 4.7.3-12ubuntu1) version 4.7.3 (arm-linux-gnueabi)
...

编辑:这看起来像是工具链使用的内部路径中的一个bug。在内置路径中,注意路径中有一个额外的/usr/arm-linux-gnueabi。下面的答案提供了一个解决办法。

向Ubuntu:g++-arm-linux-gnueabi不能用-sysroot编译C++程序。提交的Bug报告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-29 00:14:46

GGC启发:-param展开=100-param heapsize=131072忽略不存在的目录"=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3“忽略不存在的目录"=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi/sf”忽略不存在的目录"=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/backward“忽略不存在的目录"=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/local/include/arm-linux-gnueabi”忽略不存在的目录"=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include/arm-linux-gnueabi“忽略不存在的目录”=/usr/arm gnueabi/包括/c++/4.7.3/usr/包括“#include”.搜索从这里开始:#包括从这里开始的搜索: /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include-fixed /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/include搜索列表的末尾。C++ (Ubuntu/Linaro4.7.3-12 ubuntu1)版本4.7.3 (arm-linux-gnueabi)

这看起来像是工具链使用的内部路径中的一个bug。在内置路径中,注意路径中有一个额外的/usr/arm-linux-gnueabi。向Ubuntu:g++-arm-linux-gnueabi不能用-sysroot编译C++程序。提交的Bug报告。

为了解决这个问题,应该使用C++显式地添加到-I头的路径。

  • /usr/arm-linux-gnueabi/include/c++/4.7.3
  • /usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi

在与C++链接时,不需要指定C和--sysroot库,因为选项正确地处理它们。

因此,编译/链接命令看起来类似于:

代码语言:javascript
复制
/usr/bin/arm-linux-gnueabi-g++ ... -mcpu=cortex-m3 -mthumb \
  -I/usr/arm-linux-gnueabi/include/c++/4.7.3 \
  -I/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi \
  --sysroot=/usr/arm-linux-gnueabi test.cpp -o test.exe
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26089563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档