答案是64位Ubuntu运行32位arm-himix100-linux-gcc时缺少32位运行时库,需安装lib32z1、lib32ncurses6、lib32stdc++6等兼容库;同时确认工具链文件存在、有执行权限且PATH中无空格。

PATH配置正确但命令仍报No such file or directory
这通常不是环境变量没生效,而是系统找不到arm-himix100-linux-gcc这个二进制文件的**动态链接器依赖**。64位Ubuntu运行32位交叉编译器时,会提示“找不到文件”,其实它找到了可执行文件,但加载失败——因为缺32位运行时库。
验证方式:在arm-himix100-linux-gcc所在目录下直接运行./arm-himix100-linux-gcc -v,如果报同样错误,基本可确认是此问题。
- 安装必需的32位兼容库:
sudo apt-get install lib32z1 lib32ncurses6 lib32stdc++6 - 不需要装
ia32-libs(已废弃),也不用重装整个工具链 - 如果提示
lib32ncurses6不可用,改用lib32ncurses5(老版本Ubuntu)或lib32tinfo6(Ubuntu 22+) - 装完后不用重启,直接再试
arm-himix100-linux-gcc -v
交叉编译器路径本身不存在或权限不足
PATH里写的路径看似正确,但实际目录可能被误删、挂载失败,或文件没有执行权限。尤其解压后直接从Windows复制过来的tar包,容易丢失x权限。
- 用
ls -l /path/to/toolchain/bin/arm-himix100-linux-gcc确认文件存在且有x权限 - 若无执行权限,运行:
chmod +x /path/to/toolchain/bin/arm-himix100-linux-gcc - 检查路径是否含空格或中文——
export PATH中不能有空格,等号两边也不能有空格 - 用
which arm-himix100-linux-gcc看是否真能定位到,再用readlink -f $(which arm-himix100-linux-gcc)确认最终解析路径
LD_LIBRARY_PATH没影响,但动态库路径错乱
这个错误和LD_LIBRARY_PATH无关——那是运行时找共享库用的,而No such file or directory发生在shell尝试execve()系统调用时,属于加载器层面的问题。
-
LD_LIBRARY_PATH对解决此报错完全无效,别白费力气设它 - 真正起作用的是系统动态链接器能否加载该二进制:可用
file /path/to/arm-himix100-linux-gcc看它是32位还是64位 - 再用
ldd /path/to/arm-himix100-linux-gcc,如果显示not a dynamic executable,说明是静态链接;若显示一堆not found,就是缺32位库 - 注意:
ldd在64位系统上跑32位程序时,需先装gcc-multilib才可能正常输出
Makefile里CC变量写错导致误报
有时候你在终端里能跑通arm-himix100-linux-gcc,但make却报同样错误。这是因为Makefile里硬编码了错误路径,或者CROSS_COMPILE拼错了前缀。
- 检查Makefile中类似
CC = $(CROSS_COMPILE)gcc这一行,确认CROSS_COMPILE值是arm-himix100-linux-,末尾有短横 - 运行
make V=1看实际执行的命令,确认是否调用了完整路径或正确前缀 - 临时覆盖:运行
make CC=arm-himix100-linux-gcc绕过Makefile设置,验证是否真能工作 - 别在Makefile里写绝对路径如
/opt/toolchain/bin/arm-himix100-linux-gcc——路径迁移时极易失效
lib32stdc++6后立刻能跑,但很多人反复检查PATH、反复source,就是漏掉这一层。


















