深度linux的arm-linux-gnueabihf-gcc编译参数如何配?
一般来说,交叉编译工具是用于在一种架构的主机(例如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。
谢谢你的帮助
广告 您可能关注的内容 |