strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_
- 配置全局变量两种方式
vim /etc/profile
或者
vim /etc/environment
或者(对应权限下对应配置文件 ,用户权限和root权限下不共用)
vim ~/.bashrc
export PATH=/root/qtArm64Toolchain/Ambarella_Linaro_Toolchain_2016.02_For_S5/linaro-aarch64-
2016.02-gcc5.3/bin:$PATH #没验证
export PATH="$PATH:/usr/aarch64-linux-gnu_8.2/bin"
重新加载,使配置生效
source /etc/profile
- 编译器版本选择
sudo apt install gcc-8-aarch64-linux-gnu
sudo apt-get remove --purge gcc-aarch64-linux-gnu
安装路径:
可执行文件在 /usr 下
通过aptget 安装的交叉编译工具 aarch64-linux-gnu 的 libc.so.6 文件在
/usr/aarch64-linux-gnu/lib/ 下
通过下载的软件包 ,解压就能用,需要配置环境变量
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
对应的libc.so.6文件在
gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/aarch64-linux-gnu/libc/lib64/ 下
- 查看磁盘大小
df -hl
http://man.chinaunix.net/linux/lfs/htmlbook/chapter06/chapter06.html参考具体的gcc相关软件安装
本人的联系方式为:549827768@qq.com,西华大学
我们采用crosstool0.42来作为我们编译交叉编译工具链的脚本。详细的用法说明请阅读网站上的文档crosstool-how to 。
[zzl@localhost] tar -xzvf crosstool-0.43.tar.gz
[zzl@localhost]cd crosstool-0.42
我们可以看到目录下有很多.sh脚本和.dat配置文件。每一个支持的CPU都有它所相应的脚本,如我们选用demo-arm9tdmi.sh
需要我们记住的三个重要的变量:
TARBALLS_DIR=$HOME/downloads #$HOME为用户的主目录,如fedora这个目录,是固定的,与$PWD为当前路径不同
RESULT_TOP=/usr/local/arm #做了更改
GCC_LANGUAGES="c,c++"
我们需要如下压缩包:gcc-3.4.1.tar.gz glibc-2.3.3.tar.gz linux-2.6.17binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz
gdb6.0a.tar.gz,且还要下载内核arm补丁,给它打补丁,之后再压缩成原来格式,并删除解压的文件,只保留打补丁后的文件
下面为打补丁的格式,其中linux为linux内核解压后产生的目录:
tar jxvf patch-2.4.18-rmk7.bz2;cp patch-2.4.18-rmk7 linux;cd linux;patch -p1<patch-2.4.18-rmk7
最后再次还原成原来的包文件:tar czvf linux-2.4.18.tar.gz linux ,即将linux目录及其文件打包为前面的文件名
首要任务是下载这些源代码软件包,并将它们放在/home/fedora/downloads下面,保证这些包的所有者为当前用户而不是根用户。
可以用chown usr 文件名,更改使用者,更改后的使用者为usr,我的用户名为fedora,可以用ll查看用户名
我们选择的配置是:demo-arm9tdmi.sh,其内容具体如下:
#!/bin/sh
set -ex
TARBALLS_DIR=$HOME/downloads
RESULT_TOP=/usr/local/arm #原本是:/opt/crosstool ,后修改了
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP #应该先创建/usr/local/arm目录,并chmod fedora /usr/local/arm 目录的用户为fedora
#-p, --parents 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
# Build the toolchain. Takes a couple hours and a couple gigabytes.
eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest --gdb#增加调试器
从 eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest --gdb
可以看出,我们的gcc版本采用3.2.3,glibc版本采用2.2.5。
我们再来看gcc-3.2.3-glibc-2.2.5.dat这个文件,并做一些更改
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.2.3
GLIBC_DIR=glibc-2.2.5
LINUX_DIR=linux-2.4.18 #修改后的内容,为了匹配内核
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
GDB_DIR=gdb-6.0 #增加的内容
修改 armtdmi.dat 文件如下红色部分:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-9tdmi-linux-gnu(这个名字可以改成你想要的交叉工具链前缀名)
TARGET_CFLAGS="-O"
GCC_EXTRA_CONFIG="--with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi"
TOOLCOMBO=3.2.3 #gcc版本号作为文件名
修改第 70 行,更改安装路径,将:
PREFIX=${PREFIX‐$RESULT_TOP/$TOOLCOMBO/$TARGET}
PREFIX=${PREFIX‐$RESULT_TOP/$TOOLCOMBO} #即路径最终为:/usr/local/arm/3.2.3,gcc就在3.2.3的bin库中
#vi /etc/profile在if代码 语句中添加绝对路径
PATH=$PATH :/usr/local/arm/3.2.3/gcc-3.2.3-glibc-2.2.5/arm9tdmi-linux-gnu/bin
也可以设置为临时变量:export PATH=$PATH :/usr/local/arm/3.2.3/gcc-3.2.3-glibc-2.2.5/arm9tdmi-linux-gnu/bin
但每次开机要重启,此时我们编译器就上上述的路径中,包含arm-9tdmi-linux-gnu-gcc,arm-9tdmi-linux-gnu-g++,arm-9tdmi-linux-gnu-ld
如果gcc版本太高,可以用
yum install compat-gcc-34 ,3.4版本的gcc不过之前应该在/usr/bin下重命名gcc,以保证之后还能运行,可以查看它的版
本,cat /proc/version,用它的版本号来重命名,gcc -v查看当前gcc版本号
ftp://ftp.sunet.se/pub/Linux/distributions/scientific/53/i386/SL/
上面这个网站中有一些低版本的gcc和glibc,另外还有一些nfs工具等等,其中就有以compat开头的gcc和glibc,另外当然还有以gcc、glibc开头的
specs文件最后在/usr/local/arm/3.2.3/gcc-3.2.3-glibc-2.2.5/arm9tdmi-linux-gnu/lib中,specs文件中一般有一句/lib/ld-linux.so.2,有可能要修改为自己的库
一个常见的问题就是:拿到客户的开发板后需要验证自己本地搭建的交叉编译环境是否正确,这影响到后续的开发.glibc就是指libc.so.6这个动态库,libc.so.6软链接到实际的动态库.
场景复现(scenario)同一份源代码(hello_world.c),在Ubuntu16.04下编译(gcc hello_world.c):在Ubuntu18.04下编译(gcc hello_world.c):图片中,被标注出来的部分叫做“ABI”,应用程序二进制接口(Application Binary Interface),跟操作系统内核版本有关。那这个有什么关系呢?假设,我们在编...
一、编译过程
../configure --host=arm-hisiv200-linux-gnueabi CC=arm-hisiv200-linux-gcc CFLAGS="-g -O2 -U_FORTIFY_SOURCE" --enable-add-ons --prefix=/root/tem
glib是一个C语言函数库,它对很多系统调用进行了封装,提供了很多实用的功能,能极大地方便编程。
为了在产品上尝试使用glib,需要对glib进行交叉编译,使其能在ARM9上运行。但编译中间会碰到很多错误,需要耐心地逐一解决。
重点内容第一步:从相关的网站下载安装包,给大家推荐两个网站:http://download.chinaunix.net/download/0004000/3823.shtml;http://www.gnu.org/software/libc/。我先后下载过:
glibc-2.8**的,glibc-2.4**的,后来glibc-2.14才好使,具体原因下面我会讲到。
我下载的安装包两种:glibc
ncnn编译android版关键点检测动态链接库(so文件)
一、编译ncnn
具体步骤见博客:https://blog.csdn.net/zhang_comeon/article/details/100042512
二、安装NDK
1.安装包下载:https://developer.android.google.cn/ndk/downloads/index.html
2.解压安装
export ...
这几天升级线上版本,遇到一个glibc版本不一致的问题,导致服务无法升级,坑了我好快两天。把这个记录下来方便其他遇到问题的小伙伴可以参考下:
1) 问题现象 :启动的时候
“/lib64/libc.so.6: version `GLIBC_2.14' not found (required by“
2)查看本地和线上的glibc的版本是否一致:
ldd --version 可以查看下本地的glibc和线上的glibc版本
由于线上机器系统版本不一样,glib...
0、sudo -i 很重要否则make install 出错
export PATH=$PATH:/opt/GSRD/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/
1、libffi
CC=arm-linux-gnueabihf-gcc ./configure+--prefix=/opt/GSRD/glib-2.45.1/ffi-3.2.1/ --host=arm-linux-gnueabihf
make&make ..
我们在开发过程中,有时候可能需要根据我们的业务场景对glibc进行定制化修改,因此有必要了解glibc的编译方法。通常编译glibc需要以下几个步骤:
1. 由于我们一般是在x86环境的编译服务器下编译运行在arm环境下的目标固件,因此我们通常需要利用交叉编译工具链。所以,我们首先需要指定我们的交叉编译工具链的路径。
export PATH=$PATH:/home/xxxx(交叉编译工具链路径)
2. 利用configure编译生成makefile文件