解决编译问题:arm-none-linux-gnueabi-gcc: directory: No such file or directory

本文解决了一个特定的编译错误,该错误出现在尝试编译Mali图形内核模块时。问题源于Makefile中SVN版本号的不当处理,导致编译器无法正确解析。文章详细介绍了如何修复这一问题,包括修改Makefile中的SVN版本号获取方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译4412突然出现报错:

CC      drivers/media/video/samsung/mali_ics/common/mali_kernel_core.o
arm-none-linux-gnueabi-gcc: directory: No such file or directory
arm-none-linux-gnueabi-gcc: directory": No such file or directory
<command-line>:0: warning: missing terminating " character
drivers/media/video/samsung/mali_ics/common/mali_kernel_core.c: In function 'mali_kernel_constructor':
drivers/media/video/samsung/mali_ics/common/mali_kernel_core.c:172: error: missing terminating " character
drivers/media/video/samsung/mali_ics/common/mali_kernel_core.c:172: error: expected expression before ')' token

新解压的代码,看mali_kernel_core.c:172行也没有错误,找了半天才发现问题出在makefile

在Makefile里自动生成了SVN版本:

SVN_REV:=$(shell ((svnversion | grep -qv exported && echo -n 'Revision: ' && svnversion) || git svn info | sed -e 's/$$$$/M/' | grep '^Revision: ' || echo ${MALI_RELEASE_NAME}) 2>/dev/null | sed -e 's/^Revision: //')

由于我解压的代码不在SVN控制下,这里的SVN_REV取值为“SVN_REV="Unversioned directory"”,含有的空格导致编译解析出错,解决办法:

将转义出现的空格

SVN_REV:=$(shell ((svnversion | grep -qv exported && echo -n 'Revision: ' && svnversion) || git svn info | sed -e 's/$$$$/M/' | grep '^Revision: ' || echo ${MALI_RELEASE_NAME}) 2>/dev/null | sed -e 's/^Revision: //')

或者不使用SVN版本号,将SVN_REV定义为空也行

<think>我们正在安装一个特定版本的ARM交叉编译工具链:arm-2014.05-29-arm-none-linux-gnueabi。 步骤通常包括:下载工具链、解压、设置环境变量(如PATH)等。 注意:由于是2014年的版本,可能在一些新的Linux发行版上需要额外的兼容性处理(如32位库支持)。 根据引用[^1]的内容,我们得知: - 工具链的命名规则中,arm-none-linux-gnueabi是针对运行Linux操作系统的ARM架构的。 - 安装步骤一般包括下载和解压,然后配置环境变量。 具体步骤: 1. 下载工具链压缩包 通常可以从ARM官方或第三方资源下载。由于版本较旧,可能需要到ARM官网的历史版本页面或第三方存档站点下载。 文件名可能是:arm-2014.05-29-arm-none-linux-gnueabi.tar.bz2 或类似。 2. 解压工具链 使用tar命令解压到合适的目录,例如/opt目录(需要sudo权限)或用户主目录下的某个目录。 3. 设置环境变量 将工具链的bin目录添加到PATH环境变量中,可以通过修改.bashrc(或相应shell的配置文件)实现。 4. 验证安装 在终端中运行arm-none-linux-gnueabi-gcc --version,查看是否成功。 注意:如果系统是64位的,可能需要安装32位运行库(如libc6-i386),因为旧版工具链可能是32位的。 详细步骤: 步骤1:下载工具链 如果无法在ARM官网找到,可以尝试在第三方资源中搜索。注意安全性。 步骤2:解压工具链 假设下载的文件在~/Downloads目录下,我们将其解压到/opt目录: sudo tar -xjvf ~/Downloads/arm-2014.05-29-arm-none-linux-gnueabi.tar.bz2 -C /opt 如果下载的是.gz格式,则使用: sudo tar -xzvf ~/Downloads/arm-2014.05-29-arm-none-linux-gnueabi.tar.gz -C /opt 步骤3:设置环境变量 打开当前用户的.bashrc文件(在用户主目录下): nano ~/.bashrc 在文件末尾添加: export PATH=$PATH:/opt/arm-2014.05-29/bin 注意:解压后的路径可能不同,请确认解压后的实际路径。例如,解压后可能在/opt/arm-2014.05-29/arm-none-linux-gnueabi/bin,那么路径应为/opt/arm-2014.05-29/arm-none-linux-gnueabi/bin 保存并退出,然后运行: source ~/.bashrc 步骤4:验证安装 打开新终端,运行: arm-none-linux-gnueabi-gcc -v 应该会显示gcc的版本信息。 可能遇到的问题解决: 1. 如果提示“没有那个文件或目录”,可能是工具链是32位的,而系统是64位且没有安装32位支持库。 在Ubuntu/Debian上可以安装: sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 在CentOS/RHEL上可以安装: sudo yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 2. 如果找不到命令,请检查PATH设置是否正确,以及解压后的目录结构。 引用[^1]中提到了工具链的区别,但安装步骤是通用的。 因此,按照上述步骤,应该可以完成安装。 生成相关问题: 根据用户需求,我们生成了关于交叉编译工具链安装的问题,但为了更全面,可以生成如下问题: 1. 如何验证交叉编译工具链是否安装成功? 2. 在64位Linux系统上安装旧版32位交叉编译工具链需要注意什么? 3. 除了环境变量PATH,还有哪些环境变量需要设置以使用交叉编译工具链? 4. 如何为不同的项目指定不同的交叉编译工具链? 5. 交叉编译工具链中的arm-none-linux-gnueabiarm-linux-gnueabihf有什么区别? 注意:引用[^1]的链接是http://www.veryarm.com/296.html,其中介绍了不同工具链的区别,用户可以参考。</think>### 安装 arm-2014.05-29-arm-none-linux-gnueabi 交叉编译工具链 #### 步骤 1:下载工具链 访问 ARM 官网或可信镜像源下载指定版本: ```bash wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/4.8-2014q1/gcc-arm-none-linux-gnueabi-2014.05-29.tar.bz2 ``` > **注意**:若链接失效,可在 [ARM 存档库](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads) 搜索历史版本[^1]。 #### 步骤 2:解压工具链 ```bash sudo tar -xjf gcc-arm-none-linux-gnueabi-2014.05-29.tar.bz2 -C /opt ``` 解压后路径为:`/opt/gcc-arm-none-linux-gnueabi-2014.05-29` #### 步骤 3:配置环境变量 编辑 `~/.bashrc` 文件: ```bash echo 'export PATH=$PATH:/opt/gcc-arm-none-linux-gnueabi-2014.05-29/bin' >> ~/.bashrc source ~/.bashrc ``` #### 步骤 4:验证安装 ```bash arm-none-linux-gnueabi-gcc -v ``` 成功输出应包含: ``` gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) ``` #### 兼容性问题解决(64位系统) 若出现 `No such file or directory` 错误,安装 32 位兼容库: - **Ubuntu/Debian**: ```bash sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 ``` - **CentOS/RHEL**: ```bash sudo yum install glibc.i686 ncurses-libs.i686 libstdc++.i686 ``` #### 工具链命名说明 - **arm-none-linux-gnueabi**:针对 Linux 系统的 ARM 架构工具链 - **none** 表示无操作系统供应商 - **gnueabi** 表示使用 GNU EABI 接口标准[^1] --- ### 相关问题 1. 如何为不同 ARM 架构选择正确的交叉编译工具链(如 `arm-none-eabi` vs `arm-linux-gnueabihf`)? 2. 交叉编译时出现动态链接库错误应如何解决? 3. 如何永久添加交叉编译工具链到系统路径(避免每次重启后失效)? 4. 旧版工具链在新版 Linux 系统上的兼容性有哪些常见问题解决方案? 5. 如何验证交叉编译生成的二进制文件是否能在目标 ARM 设备上运行? [^1]: 工具链命名规则详解: [ARM 工具链区别](http://www.veryarm.com/296.html)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值