嵌入式实验要用到交叉编译arm-linux-gcc,其中遇到一些问题,记录如下。
1.安装交叉编译器并更新环境:
export PATH=$PATH:/usr/local/arm/4.6.2/bin/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin
后source ~/.bashrc
时提示:找不到source命令,找到如下解决方案:
https://blog.csdn.net/u013895853/article/details/81676379
普通用户sudo su 和 sudo -s都是切换到root用户,不同的是:sudo su 环境用的是目标用户(root)的环境
root后再执行。
验证是否生效
arm-linux-gcc –v
解决。
另一篇文章没有验证,也不理解
https://www.cnblogs.com/sewen-H/p/13233530.html
2.编译示例程序:
arm-linux-gcc –g –c main.c
提示:
arm-linux-gcc: error: –g: No such file or directory
arm-linux-gcc: error: –c: No such file or directory
查找发现:
https://www.cnblogs.com/liangning/p/4273383.html
搞了半天,才发现是ubuntu版本的问题。本人的ubuntu是64位,而下载的这些交叉编译器是32位的。因此需要安装ia32-libs库
下面安装32位运行库:
https://blog.csdn.net/wanxuexiang/article/details/83898397
通过下面两条命令进行安装即可:
1、apt-get install lib32ncurses5
2、apt-get install lib32z1
在执行apt-get install lib32ncurses5
时报错,
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
E: 无法定位软件包
尝试另一种办法:
https://blog.csdn.net/lv75543255/article/details/90754684?utm_medium=distribute.pc_relevant_download.none-task-blog-2defaultBlogCommendFromBaidudefault-17.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2defaultBlogCommendFromBaidudefault-17.nonecas
要在64位多架构Ubuntu系统上运行32位可执行文件,您必须添加i386架构
(1)添加i386架构
sudo dpkg --add-architecture i386
(2)更新源信息
sudo apt update
(3)安装相应的32位库,库名后面加上:i386,比如libc6:i386, libstdc++6:i386,libncurses5:i386
sudo apt install libc6:i386 libstdc++6:i386 libncurses5:i386
(4)如果还需要其他库,请按需安装即可
在执行sudo apt update
时报错:
命中:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
命中:2 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease
命中:3 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease
命中:4 http://mirrors.aliyun.com/ubuntu bionic-security InRelease
命中:5 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease
命中:6 http://ppa.launchpad.net/wireshark-dev/stable/ubuntu bionic InRelease
获取:7 http://packages.ros.org/ros/ubuntu bionic InRelease [4,680 B]
错误:7 http://packages.ros.org/ros/ubuntu bionic InRelease
下列签名无效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
已下载 4,680 B,耗时 2秒 (2,124 B/s)
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
有 308 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:http://packages.ros.org/ros/ubuntu bionic InRelease: 下列签名无效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: 无法下载 http://packages.ros.org/ros/ubuntu/dists/bionic/InRelease 下列签名无效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。
查找解决方法:
http://t.zoukankan.com/liuzhenbo-p-11032733.html
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED91CA3AC1160CD
将其中密钥还为验证不通过的密钥,执行。
结果:
Executing: /tmp/apt-key-gpghome.sS2MmDyFUN/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
gpg: 密钥 F42ED6FBAB17C654:“Open Robotics info@osrfoundation.org”1 个新的签名
gpg: 合计被处理的数量:1
gpg: 新的签名:1
再次执行sudo apt update
等命令发现
libc6:i386 已经是最新版 (2.27-3ubuntu1.4)。
libc6:i386 已设置为手动安装。
libncurses5:i386 已经是最新版 (6.1-1ubuntu1.18.04)。
libncurses5:i386 已设置为手动安装。
libstdc++6:i386 已经是最新版 (8.4.0-1ubuntu1~18.04)。
libstdc++6:i386 已设置为手动安装。
方向不对,继续查找解决办法:
https://blog.csdn.net/qq_41547890/article/details/116672321
原因:
从上面这个报错其实也知道原因了,就是在“更新源地址平台上”找不到相应的“lib32ncurses5”软件包。找不到软件包通常是软件包名输入错误,或者说,没有这个软件包了,有些软件包可能会被移除或被其它的软件包替代了等等。
解决方法:
将apt-get install lib32ncurses5
改为apt-get install lib32ncurses5-dev
运行成功。
还遇到另一问题:
module ‘enum’ has no attribute ‘IntFlag’
查找:
https://www.cnblogs.com/guohongwei/p/10870053.html
直接卸载:
pip uninstall enum34
没有解决。
https://www.jianshu.com/p/9c8237bb3598
查找之后,路径下并没有enum。
https://www.e-learn.cn/content/python/2181404
查询发现,是PYTHONPATH的设置错误,在.bashrc中存留有以前使用python2时留下的配置,导致python3不能找到正确的enum位置,注释掉bashrc中相关语句后,清空$PYTHONPATH变量即可:
unset PYTHONPATH
成功解决。
继续尝试编译。