高拓 SDK Linux 环境下编译问题解决
debug 过程
- 编译app_wifi_cmd.c 出现
execv: No such file or directory
,开始以为是 Makefile 问题,后面核对了下Makefile,没看到问题。
- 接着怀疑是
nds32le-elf/bin/as
不存在,但执行ls -alh /opt/nds32le-elf-mculib-v3/bin/../lib/gcc/nds32le-elf/4.9.3/../../../../nds32le-elf/bin/as
,发现文件是存在的。
猜测是这个文件无法执行。为了验证,直接执行
as --version
,发现是可以显示版本的,但执行/opt/nds32le-elf-mculib-v3/bin/../lib/gcc/nds32le-elf/4.9.3/../../../../nds32le-elf/bin/as
, 也显示execv: No such file or directory
,基本确定是/nds32le-elf/bin/as
无法执行。执行
file /opt/nds32le-elf-mculib-v3/bin/../lib/gcc/nds32le-elf/4.9.3/../../../../nds32le-elf/bin/as
查看/nds32le-elf/bin/as
文件格式。发现是动态连接的,基本可以确定是少了某种连接库引起的。find /lib -name ld-linux.so.2
在Linux上查找ld-linux.so.2,果然没有。Google 搜索
ubuntu install ld-linux.so.2
, 发现一个有用链接。根据文章内容,执行sudo apt-get install libc6-i386
。在SDK根目录再次尝试编译
make all
,发现提示缺少libz.so.1
,继续 Googlelibz.so.1
,发现一个有用链接。按照提示,安装sudo apt-get install lib32z1
。再次尝试编译,编译通过。
总结:
- 出现这个问题,是由于在64位环境下,缺少动态库引起的,按照出错提示,Google 相应的库,按照需求安装就OK了。
- 所用到的指令集
1 | sudo apt-get install libc6-i386 |