这两天心血来潮,执行完 repo sync 后,顺手来了一下 make,不料却发现了以下的错误:
host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
In file included from /usr/include/features.h:378,
from /usr/include/string.h:26,
from external/clearsilver/java-jni/j_neo_util.c:1:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: No such file or directory
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/j_neo_util.o] Error 1
兵来将挡,水来土掩,用关键字 android “error: gnu/stubs-64.h: no such file or directory” 来搜一下吧,发现搜索结果寥寥无几,看样子问题比较新,其中有一个 CSDN 的链接,就顺手点了过去。帖子反映的问题和我一模一样,不过它的分析给了我一些提醒。
从错误信息入手,追踪到/usr/include/gnu/stubs.h,看到如下代码:
#if __WORDSIZE == 32
# include <gnu/stubs-32.h>
#elif __WORDSIZE == 64
# include <gnu/stubs-64.h>
#else
# error "unexpected value for __WORDSIZE macro"
#endif
顺着 WORDSIZE,进入/usr/include/bits/wordsize,发现:
#if defined __x86_64__
# define __WORDSIZE 64
# define __WORDSIZE_COMPAT32 1
#else
# define __WORDSIZE 32
#endif
结合报错的信息,可以知道这里一定是有定义__x86_64__,执行一下 uname -a 可以确认 OS 明明是x86,为什么会__x86_64__呢?追根溯源, Android 源码或许能露出蛛丝马迹。
果不其然,从 android.git.kernel.org 的 platform/external/clearsilver.git 上,看到5天前,有个 Ying Wang 的家伙提交一个修改:Fix 64-bit clearsilver shared library issue,参看这里,修改内容中 java-jni/Android.mk,和出现本次问题的路径 java-jni/j_neo_util.c,同属一个父目录,看样子有点关系,查看 Android.mk 的修改内容,发现做了如下修改:
+# This forces a 64-bit build for Java6
+ifneq ($(filter 1.6%,$(java_version)),)
+ LOCAL_CFLAGS += -m64
+ LOCAL_LDFLAGS += -m64
+endif
当发现你使用Java6时,它将强制使用64-bit,我想这就能解释__x86_64__出现的原因。那么既然它要64-bit,我就满足它。首先要解决 gnu/stubs-64.h: No such file or directory,解决这个问题需要执行以下命令:
[xuhj@eniac mydroid]$ apt-get install libc6-dev-amd64
完成以后再执行 make,发现有错误:
/usr/bin/ld: cannot find -lstdc++
那就继续满足它:
[xuhj@eniac mydroid]$ apt-get install g++-multilib lib64stdc++6
还是不行,又发生下面的错误:
/usr/bin/ld: cannot find -lz
再来执行命令:
[xuhj@eniac mydroid]$ apt-get install lib64z1-dev
分享到:
相关推荐
在64位Linux系统下编译C语言程序时,可能会出现gnu/stubs-32.h文件不存在的错误,主要是因为缺少32位兼容包的原因。今天,我们就来探讨解决这个问题的方法。 首先,让我们了解问题的出现原因。在编译C语言程序时,...
### 在Ubuntu虚拟机下关于缺少头文件<gnu/stubs.h>的解决办法 #### 背景概述 在使用Ubuntu虚拟机进行交叉编译时,可能会遇到找不到特定头文件的问题,比如`<gnu/stubs.h>`。这种情况通常发生在尝试编译特定架构的...
TensorRT-8.0.0.3.Linux.x86_64-gnu.cuda-11.0.cudnn8.2.zip使用需要的环境: ubuntu18.04 tensorrt==8.0.0.3 cuda==11.0 cudnn==8.2
gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian目标中的裸机程序、u-boot、Linux kernel、...
TensorRT-8.0.1.6.Linux.x86_64-gnu.cuda-10.2.cudnn8.2.zip使用需要的环境: ubuntu18.04 tensorrt==8.0.1.6 cuda==10.2 cudnn==8.2
TensorRT-8.0.0.3.Linux.x86_64-gnu.cuda-10.2.cudnn8.2.zip使用需要的环境: ubuntu18.04 tensorrt==8.0.0.3 cuda==10.2 cudnn==8.2
TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz由于文件太大放百度云盘,失效请及时联系博主。
总之,"gcc-linaro-6.3.1-2017.05-x86-64-aarch64-linux-gnu.7z"是一个用于在x86_64系统上进行Aarch64 Linux应用开发的交叉编译工具链,包含GCC编译器和其他必要的工具,使得开发者能够在不同架构之间轻松迁移和测试...
TensorRT-8.6.1.6.Linux.x86-64-gnu.cuda-11.8.tar.gz由于文件太大放百度云盘,失效请及时联系博主。
arm-linux-gcc交叉编译工具: 备注:使用此资源时需要解压两次,因为上传时显示资源重复上传失败,于是套了两层压缩。... $sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
TensorRT 7.0.0.11是该库的一个版本,专为Ubuntu 18.04操作系统设计,支持x86_64架构,并且针对CUDA 10.2和CUDNN 7.6进行了优化。 CUDA(Compute Unified Device Architecture)是NVIDIA提供的编程工具包,允许...
gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux ...
gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian hard-float, little-endian目标中的裸机程序、u-boot、...
这个名为"TensorRT-8.4.3.1.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz"的压缩包文件,包含了TensorRT的8.4.3.1版本,专为64位的Linux操作系统设计,并且依赖于CUDA 11.6和CUDNN 8.4这两款NVIDIA的重要库。...
TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian目标中的裸机程序、u-boot、Linux kernel、...
gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译32-bit Armv7 Cortex-A, hard-float, little-endian目标中的裸机程序、u-boot、Linux...
在使用Linux系统,尤其是CentOS 6.7版本时,可能会遇到执行某些程序时出现`-bash: ./DrClientLinux: /lib/ld-linux.so.2: bad ELF`的错误提示。这个错误通常意味着系统找不到或者无法正确识别所需的动态链接库...
gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz 工具,我这个免费下载,鄙视那些要币的人!下载后先解压rar,解压就就是gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz了! 我本来想...