Linux关于找不到交叉编译器的解决思路

提供目前我解决的思路,肯定不全,欢迎补充。

先看报错:

make: /**/toolchain/zxic/usr/bin/arm-linux-gcc: 没有那个文件或目录

这里我用了绝对路径,所以和有没有添加环境变量没什么关系(我觉的一般交叉编译工具的依赖也不会说要自己单独添加到环境变量吧)

解决思路

1、查看权限

ls -l /**/toolchain/zxic/usr/bin/arm-linux-gcc

返回结果(有些不重要信息省略了,下面示例都一样):
lrwxrwxrwx 1 ... /**/toolchain/zxic/usr/bin/arm-linux-gcc -> toolchain-wrapper

我这还是个软连接,这种情况下也要查看一下toolchain-wrapper是不是也在并且有相应权限

ls -l /**/toolchain/zxic/usr/bin/toolchain-wrapper

返回结果:
-rwxrwxr-x 1 ... /**/toolchain/zxic/usr/bin/toolchain-wrapper

2、查看依赖

ldd /**/toolchain/zxic/usr/bin/toolchain-wrapper

返回结果:
不是动态可执行文件

 在这里我一开是就很疑惑,怎么会不是可执行文件呢,于是我换了个命令查询

readelf -d /**/toolchain/zxic/usr/bin/toolchain-wrapper

返回结果:
Dynamic section at offset 0x10c8 contains 21 entries:
  标记        类型                         名称/值
 0x00000001 (NEEDED)                     共享库:[libc.so.6]
 0x0000000c (INIT)                       0x80485e0
 0x0000000d (FINI)                       0x8048dc8
 0x00000004 (HASH)                       0x8048148
 0x6ffffef5 (GNU_HASH)                   0x80481f8
 0x00000005 (STRTAB)                     0x80483b8
 0x00000006 (SYMTAB)                     0x8048228
 0x0000000a (STRSZ)                      268 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000003 (PLTGOT)                     0x804a19c
 0x00000002 (PLTRELSZ)                   160 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x8048540
 0x00000011 (REL)                        0x8048528
 0x00000012 (RELSZ)                      24 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x80484f8
 0x6fffffff (VERNEEDNUM)                 1
 0x6ffffff0 (VERSYM)                     0x80484c4
 0x00000000 (NULL)                       0x0

看NEEDED那一行的结果说明需要依赖libc.so.6这个库,下一步查询这个库

ldconfig -p | grep libc.so.6

返回结果:
libc.so.6 (libc6,x86-64, OS ABI: Linux 3.2.0) => /lib/x86_64-linux-gnu/libc.so.6

3、看类型

据readelf的结果表示有这个依赖库,那为什么ldd没找到,于是我查询了编译器类型

file /**/toolchain/zxic/usr/bin/toolchain-wrapper

返回结果:
/**/toolchain/zxic/usr/bin/toolchain-wrapper: ELF 32-bit LSB /
executable, Intel 80386, version 1 (SYSV), /
dynamically linked, interpreter /lib/ld-linux.so.2, /
for GNU/Linux 2.6.9, stripped

问题就出在这里,交叉编译器是32位的可执行文件,但我的系统是64位的,所以ldd返回错误的原因应该就是缺少相应支持的32位库,所以不能正常解析这个文件,解决办法:

参考:ubuntu 64下运行32位程序 - 知乎

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值