prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc问题解决

本文介绍了一种在Ubuntu环境下编译Android 4.4源码时遇到的权限不足错误,并详细解释了如何通过安装和配置NTFS-3G和NTFS-config插件来解决NTFS格式磁盘上的文件权限问题。

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


1. 现象: 编译android4.4源码时,出现如下错误:

/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc: 权限不够
/bin/bash: prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc: 权限不够
/bin/bash: build/core/find-jdk-tools-jar.sh: 权限不够
build/core/config.mk:365: *** Error: could not find jdk tools.jar, please install JDK6, which you can download from java.sun.com。 停止。

** Don't have a product spec for: 'aosp_arm'
** Do you have the right repo manifest?


2.   该问题已经解决,来龙去脉是这样的:

       1)、我的ubuntu 12.04是用wubi安装的,为了节约ubuntu 磁盘空间,我将编译android编译源码下载好后,复制到了media挂载下的windows磁盘,问题就来了,我的windows盘符是NTFS格式的,发现里面的文件无法添加可执行权限,去手动修改也不行,root也没用。
      2)、产生同类情况的当然也有java环境变量没有配置好的原因,但我的情况是上面这一种,所以怎么配置java环境变量都是不行的,也试图chmod加权当然也失败了。

具体解决方法如下:
                我的windows盘符是NTFS格式的,发现里面的文件无法添加可执行权限,去手动修改也不行,root也没用,无奈上网搜索,最终发现了解决的方法,

安装两个插件:

  sudo apt-get installntfs-3g      //这个12.04已经有了。
  sudo apt-get installntfs-config  //这个是个图形界面的NTFS权限配置程序。

然后使用输入命令:ntfs-config(NTFS写入支持配置程序)直接勾选配置即可使得挂载的盘符获得可执行权限~


补充: 原理就是这样。但是,有时候用这种方法也未必能解决问题。


### 链接器错误 `cannot find -llog` 的解决方案 在 RK3288 Android 5.1 环境下遇到链接器错误 `cannot find -llog`,通常是因为编译环境中缺少必要的库文件或者路径配置不正确。以下是详细的分析和解决方法: #### 错误原因 该问题的核心在于链接阶段无法找到 `-llog` 库文件。Android 平台上的日志功能依赖于 `liblog.so` 或者静态版本的 `liblog.a` 文件[^1]。如果这些文件未被正确包含到工具链中,则会出现此错误。 --- #### 解决方案 ##### 方法一:确认工具链中的 liblog 存在 检查当前使用的工具链目录是否包含了 `liblog.so` 或 `liblog.a` 文件。对于 ARM 架构下的工具链,可以按照以下路径查找: ```bash $NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/<version>/../../../../arm-linux-androideabi/sysroot/usr/lib/ ``` 如果没有发现上述文件,可能需要手动复制它们至目标位置。可以从其他完整的 NDK 安装包提取所需的动态或静态库文件并放置于此处[^2]。 ##### 方法二:调整 LDFLAGS 参数 确保在构建脚本中设置了正确的链接选项以及库搜索路径。例如,在 Makefile 中加入如下参数: ```makefile LDFLAGS += -L$(SYSROOT)/usr/lib -llog ``` 其中 `$(SYSROOT)` 是指代系统根目录 (sysroot),它定义了目标平台的标准库所在的位置[^3]。 另外需要注意的是,某些情况下还需要指定 ABI 版本号来匹配特定架构的需求;比如针对 armeabi-v7a 可能要额外增加标志位如 `-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp` 等[^5]。 ##### 方法三:验证环境变量设置无误 再次核验 `$PATH`, `$CC`, 和 `$CXX` 是否指向合适的交叉编译器实例。例如当采用 arm-linux-androideabi 工具链时应满足下面条件之一: ```bash export PATH=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH export CC=arm-linux-androideabi-gcc export CXX=arm-linux-androideabi-g++ ``` 同时也要保证 SYSROOT 被正确定义以便让编译器知道去哪里寻找头文件与共享对象(.so)[^4]. --- ### 示例代码片段 假设我们正在尝试通过命令行调用 g++ 来完成一个简单的程序编译工作,那么最终执行语句看起来会像这样: ```bash arm-linux-androideabi-g++ test.cpp \ --sysroot=$NDK/platforms/android-21/arch-arm/ \ -I$NDK/sources/cxx-stl/gnu-libstdc++/4.9/include \ -L$NDK/platforms/android-21/arch-arm/usr/lib \ -llog -o output_binary ``` 这里特别强调了 sysroot 参数的重要性因为它决定了哪些标准库会被加载用于整个过程当中. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值