深度linux的arm-linux-gnueabihf-gcc编译参数如何配?

深度linux系统,c文件include了python.h,参数-I-L-l都设置好了,gcc编译也没问题,而arm-linux-gnueabihf-gcc就报找不到文件... 深度linux系统,c文件include了python.h,参数-I-L-l都设置好了,gcc编译也没问题,而arm-linux-gnueabihf-gcc就报找不到文件,与此同时arm-linux-gnueabihf-gcc编译不含的c文件就没问题。看了下报的是python.h包含的另一个.h在路径arm-linux-gnueabihf/下找不到,也就是说arm-linux-gnueabihf-gcc对-I参数的识别跟gcc不一样?是因为__ARM_EABI__吗?那我参数应该怎么设置? 展开
 我来答
heptnaol
2020-02-14 · TA获得超过7260个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1784万
展开全部

一般来说,交叉编译工具是用于在一种架构的主机(例如x86)上,编译另一种主机(例如arm)运行的程序,在这个编译期间,需要用到的头文件/库,往往需要从一个叫目标文件系统(sysroot)的路径开始查找。

sysroot里包含usr,lib,usr/lib usr/include等文件夹结构和必要的头文件和库,你理解为目标机器上的整个文件系统,搬到你这台电脑上,然后作为一个文件夹存在。

交叉编译原则上不能用主机(host)的头文件,

  • 这首先是因为编译器在查找头文件的相对路径时,交叉编译器会配置为查找目标平台架构的位置,和主机的gcc不一样,这也是为什么它去arm-linux-gnueabihf这个目录去寻找的原因。

  • 其次主机和目标机的系统版本有差异,再加上处理器架构的差异,往往有很多兼容性问题,甚至有难以解决的编译错误。

  • 如果一定要用本机的头文件系统来凑合,那么需要把所有的-I都列出来,即不仅需要-I/usr/include,还需要-I/usr/include/xxx,甚至要创建一些文件夹的符号链接指向你主机的这些头文件文件夹。即使这些,往往也未必成功,有些头文件不同的系统架构,会不完全一样甚至缺失。

交叉编译一般无法使用主机的库(so)文件

  • 主机和目标机往往架构不同,库完全不能使用

  • 可能遇到主机和目标机架构相同的情况,比如你在intel64上编译一套运行在intel64位手机的程序,但是库兼容性的问题仍然存在。

最后结论:你这个问题,如果你是为了另一套机器(比如arm开发板编译),那么需要搞一套目标机的文件系统才能顺利编译。

对了,目标文件系统需要编译了python和dev头文件/库,好多嵌入式设备裁剪的很厉害,都不用python。

追问
谢谢你的帮助
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式