zoukankan      html  css  js  c++  java
  • ubuntu下交叉编译lftp

    一.背景:

    lftp依赖于ncurses,readline和gnutls

    二.准备工作

    2.1交叉编译ncurses

    2.1.1获取ncurses源码

    wget ftp://ftp.invisible-island.net/ncurses/ncurses.tar.gz

    2.1.2解压

    tar xvf ncurses.tar.gz

    2.1.3配置以生成Makefile

    ./configure CC=arm-linux-gnueabi-gcc --host=arm-linux-gnueabi --prefix=/home/jello/ncurses-5.9/__install

    ../configure  --host=arm-linux-gnueabi --prefix=$PWD/__install --with-shared

    2.1.4 编译

    make

    2.1.5 安装

    make install

    2.2 交叉编译readline

    2.2.1获取readline源码

    wget ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz

    2.2.2 解压

    tar xvf readline-6.3.tar.gz

    2.2.3生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install

    2.2.4 编译

    make

    2.2.5安装

    make install

    2.3 交叉编译gnutls

    2.3.1 获取gnutls源码

    git clone https://gitlab.com/gnutls/gnutls.git

    cd gnutls

    git submodule update --init

    git checkout master

    2.3.2 生成configure

    autoreconf

    2.3.2.1出现以下错误提示

    configure.ac: error: required file 'build-aux/ylwrap' not found
    configure.ac:   'automake --add-missing' can install 'ylwrap'
    autoreconf: automake failed with exit status: 1

    解决方案:

    automake --add-missing

    2.3.2.2创建编译目录,防止污染源码

    mkdir build

    2.3.2.3 切换到编译目录

    cd build

    2.3.3 生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install

    2.3.3.1 出现以下错误:

    configure: error:
      ***
      *** Libnettle 3.1 was not found.

    解决方案:

     安装版本号为3.1的nettle库(加密库)

    2.3.3.1.1 获取nettle库源码

    wget ftp.gnu.org/gnu/nettle/nettle-3.1.tar.gz

    2.3.3.1.2 解压nettle库源码

    tar xvf nettle-3.1.tar.gz

    2.3.3.1.3 切换到源码目录下

    cd nettle-3.1

    2.3.3.1.4 创建编译目录

    mkdir build

    2.3.3.1.5 切换到编译目录

    cd build

    2.3.3.1.6 生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install

    2.3.3.1.7 编译源码

    make -j4

    2.3.3.1.8 安装

    make install

    2.3.4 重新生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install  NETTLE_CFLAGS=-I/home/jello/nettle-3.1/build/__install/include NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle"

    2.3.4.1 出现以下错误:

      *** Libhogweed (nettle's companion library) was not found. Note that you must compile nettle with gmp support.

    解决方案:

    2.3.4.1.1 在编译nettle时加上gmp库

    前情提要:

    nettle 是symmetric algorithms

    hogweed 是public-key algorithms

    nettle库和hogweed库组合起来就是Nettle low-level cryptographic library

    2.3.4.1.2 重新交叉编译nettle

    2.3.4.1.2.1 切换到nettle源码目录下并将之前编译的内容全部清除

    cd nettle-3.1 && rm -rf build

    2.3.4.1.2.2 创建编译目录

    mkdir build

    2.3.4.1.2.3 切换到编译目录

    cd build

    2.3.4.1.2.4 生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install CFLAGS=-I/home/jello/gmp-6.1.2/build/__install/include LDFLAGS=-L/home/jello/gmp-6.1.2/build/__install/lib LIBS=-lgmp   (gmp库的编译方法在后面)

    2.3.4.1.2.5 编译源码

    make -j4

    2.3.4.1.2.6 安装

    make install

    2.3.5 再次生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install NETTLE_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle" HOGWEED_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" HOGWEED_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lhogweed"

    2.3.5.1 提示以下错误:

    Libtasn1 4.9 was not found. To use the included one, use --with-included-libtasn1

    解决方案:

    2.3.5.1.1 将--with-included-libtasn1这个选项加入

    2.3.6 重新生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install NETTLE_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle" HOGWEED_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" HOGWEED_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lhogweed" --with-nettle-mini --with-included-libtasn1

    出现以下错误提示:

    Libunistring was not found. To use the included one, use --with-included-unistring

    解决方案:

    2.3.6.1 将--with-included-unistring这个选项加入

    2.3.7 重新生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install NETTLE_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle" HOGWEED_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" HOGWEED_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lhogweed" --with-nettle-mini --with-included-libtasn1 --with-included-unistring

    出现以下错误:

    checking for unbound library... no
    configure: WARNING:
    ***
    *** libunbound was not found. Libdane will not be built.
    ***
    checking for P11_KIT... no
    configure: error:
    ***
    *** p11-kit >= 0.23.1 was not found. To disable PKCS #11 support
    *** use --without-p11-kit, otherwise you may get p11-kit from
    *** http://p11-glue.freedesktop.org/p11-kit.html

    解决方案:

    2.3.7.1 加入两个选项--disable-libdane和-without-p11-kit

    2.3.7.1.1 第一个选项就是不要编译libdane库,第二个选项就是不要加入p11-kit库

    2.3.8 重新生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install NETTLE_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle" HOGWEED_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" HOGWEED_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lhogweed"  --with-included-libtasn1 --with-included-unistring --disable-libdane -without-p11-kit

    出现以下错误:

    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: error: cannot find input file: `src/libopts/Makefile.in'

    2.3.8.1 换成release版本试试,目前使用的是开发版本

    2.3.9 获取release版本

    wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5/gnutls-3.5.17.tar.xz

    2.3.10 解压

    tar xvf gnutls-3.5.17.tar.xz

    2.3.11 切换到源码目录

    cd gnutls-3.5.17

    2.3.12 创建编译目录

    mkdir build

    2.3.13 生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install NETTLE_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle" HOGWEED_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" HOGWEED_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lhogweed"  --with-included-libtasn1 --with-included-unistring --disable-libdane --without-p11-kit

    2.3.14 编译

    make -j4

    出现以下错误:

    In file included from ../../../lib/nettle/pk.c:41:0:
    ../../../lib/nettle/int/dsa-fips.h:27:17: fatal error: gmp.h: No such file or directory
     #include <gmp.h>
                     ^
    compilation terminated.
    Makefile:1474: recipe for target 'pk.lo' failed

    解决方案:

    从以上错误可知gnutls还依赖于gmp库,所以解决方案是编译好gmp库

    2.3.14.1 获取gmp库

    wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz

    2.3.14.2 解压gmp-6.1.2.tar.lz

    lunzip gmp-6.1.2.tar.lz  (需要安装lunzip这个软件,ubuntu下的安装方法: sudo apt-get install lunzip)

    tar xvf gmp-6.1.2.tar

    2.3.14.3 切换到解压后的源码目录

    cd gmp-6.1.2

    2.3.14.4 创建编译目录build

    mkdir build

    2.3.14.5 切换到build目录

    cd build

    2.3.14.6 生成Makefile

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install

    2.3.14.7 编译

    make

    2.3.14.8 安装

    make install

    2.3.15 重新编译gnutls,生成Makefile  (需要删除之前gnutls的build目录里的内容)

    ../configure --host=arm-linux-gnueabi --prefix=$PWD/__install GMP_CFLAGS="-I/home/jello/gmp-6.1.2/build/__install/include" GMP_LIBS="-L/home/jello/gmp-6.1.2/build/__install/lib -lgmp" NETTLE_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" NETTLE_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lnettle" HOGWEED_CFLAGS="-I/home/jello/nettle-3.1/build/__install/include" HOGWEED_LIBS="-L/home/jello/nettle-3.1/build/__install/lib -lhogweed" --with-included-libtasn1 --with-included-unistring --disable-libdane --without-p11-kit

    2.3.16 编译

    make

    此时会出现以下错误

    eabi/4.8.3/../../../../armlinux-gnueabi/bin/ld: warning: libnettle.so.6, needed by ../lib/.libs/libgnutls.so, not found (try using -rpath or -rpath-link)
    /opt/hisi-linux/x86-arm/arm--linux/bin/../lib/gcc/arm-linux-gnueabi/4.8.3/../../../../arm-linux-gnueabi/bin/ld: warning: libhogweed.so.4, needed by ../lib/.libs/libgnutls.so, not found (try using -rpath or -rpath-link)
    /opt/hisi-linux/x86-arm/arm-linux/bin/../lib/gcc/arm-linux-gnueabi/4.8.3/../../../../arm-linux-gnueabi/bin/ld: warning: libgmp.so.10, needed by ../lib/.libs/libgnutls.so, not found (try using -rpath or -rpath-link)
    ../lib/.libs/libgnutls.so: undefined reference to `nettle_aes192_encrypt@NETTLE_6'
    ../lib/.libs/libgnutls.so: undefined referenc

    2.3.15 安装

    三.交叉编译lftp

    3.1获取lftp源码

    wget http://lftp.yar.ru/ftp/lftp-4.8.3.tar.gz

    3.2解压

    tar xvf lftp-4.8.3.tar.gz

    3.3生成Makefile

    3.4安装

    未完待续......

  • 相关阅读:
    POJ 1182 食物链 +POJ 2492 A Bug's Life 种类并查集
    Codeforces 884C Bertown Subway dfs判环
    HDU 2102 A计划 bfs
    Codeforces Round #442 (Div. 2) 877E
    Codeforces Round #443 (Div. 2) B. Table Tennis
    Codeforces Round #442 (Div. 2) D. Olya and Energy Drinks
    HDU 1495 非常可乐 BFS/数论
    Codeforces Round #442 (Div. 2) B. Nikita and string DP
    51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈
    HDU 1286 找新朋友
  • 原文地址:https://www.cnblogs.com/dakewei/p/8292523.html
Copyright © 2011-2022 走看看