aarch64-linux-gnu/bin/ld: cannot find -lz collect2: error: ld returned 1 exit status解决方案

起因

    从linaro下载的aarch64工具链不包含libz库,导致有些static参数的编译程序无法通过,出现类似如下问题:

gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/../../../../aarch64-linux-gnu/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status”

    这种情况是由于缺少libz导致,所以需要安装交叉编译的zlib库。

源码下载

    可以从官网http://www.zlib.net/找到源码包http://www.zlib.net/zlib-1.2.11.tar.gz,下载最新的源码包。

    可能不同的时间段下载的包版本号会不一样,登录http://www.zlib.net/官网后搜索"zlib source code"关键字即可找到。

配置

    下载完成后进行交叉工具链配置。

export PATH=$PATH:$HOME/cross/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/bin/
export CC=aarch64-linux-gnu-gcc
export AR=aarch64-linux-gnu-ar
export RANLIB=aarch64-linux-gnu-ranlib
./configure --prefix=$HOME/tools/install/zlib-1.2.11/aarch64 --shared

    其中$HOME/cross/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/是我们linaro aarch64交叉工具链的放置路径。

编译

make
make install

    编译完成后会将所有编译好的文件放置到上一步./configure的--prefix参数指定的目录中。

安装libz到交叉工具链中

    上一步编译过程中我们执行“make install”后编译好的libz组件放到了$HOME/tools/install/zlib-1.2.11/aarch64目录下。这里我们要这些文件放到linaro交叉工具链相关目录下。

cd $HOME/tools/install/zlib-1.2.11/aarch64
tar -cf zlib.tar ./*
tar -xf zlib.tar -C $HOME/cross/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/

    这样安装完成后,就可以解决linaro工具链有时出现

你可能感兴趣的:(工具,处理器架构)