OpenSSL&&libcurl库的交叉编译

一、编译前环境准备

使用的内核:4.15.0-118-generic(命令:uname -r可以查看)

交叉编译器:aarch64-linux-gnu-gcc

curl源码:curl-7.72.0.tar.gz

openssl源码:openssl-1.1.1g.tar.gz

本地主机:Ubuntu 18.04.5 LTS

【注:网速不好,或者始终编译不出来的朋友可以直接加Q:3252570989获取编译好的库文件。】

二、编译openssl

因为curl依赖于openssl库,而且两个库都必须用交叉编译器编译出库文件。解压源代码tar -vxzf openssl-1.1.1g.tar.gz,进入目录openssl-1.1.1g/,在该目录下新建一个文件夹,我这里新建为rk3399_openssl/,(必须新建一个文件夹,不可以图方便,将编译好的库放到同母录下,否则会跟本地/usr/local里面的文件冲突,报一个名为“are the same file”的错误,然后make install不成功),然后首先生成Makefile,生成命令为:./config no-asm shared --prefix=/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl,这里建议先执行export CC=/your/cross/compile/path/,比如我就是执行export CC=/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc,,总之就是指名你用的交叉编译器,下面是我的:

hesetone@hesetone-PU451LD:~/Downloads$ which aarch64-linux-gnu-gcc
/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

然后开始生成openssl的Makefile,命令如下,当然,要确保用的是交叉编译器,不确定的话,可以在执行下面的命令之前echo $CC查看一下:

./config no-asm shared --prefix=/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl

./config执行,会生成Makefile,然后重点来了!!!需要手动打开Makefile,将里面的-m64编译选项删掉,一共是2处!!!再执行命令make && make install,就会在你--prefix指定的目录下得到编译结果,分别是bin/, include/, lib/, share/, ssl/五个文件夹,如下所示:

三、编译curl

openssl编译得到如上结果就表示成功,可以开始编译libcurl库,同样的,我在curl-7.72.0/目录下新建文件夹rk3399_curl/,然后执行如下命令,(为了网页阅读方便,为在适当地方加了换行,其实整个是一条命令):

CPPFLAGS="-I/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/ -I/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/include"  
LDFLAGS="-L/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/lib" LIBS="-ldl" ./configure --host=aarch64
CC=/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
CXX=/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ --with-ssl --enable-shared
--enable-static --disable-dict --disable-ftp --disable-imap --disable-ldap --disable-ldaps --disable-pop3 --disable-proxy
--disable-rtsp --disable-smtp --disable-telnet --disable-tftp --disable-zlib --without-ca-bundle --without-gnutls --without-libidn
--without-librtmp --without-libssh2 --without-nss --without-zlib --prefix=/home/hesetone/Downloads/curl-7.72.0/rk3399_curl

CPPFLAGS指向openssl编译新生成的incude/目录LDFLAGS指向lib/目录,再后面就是指名CCCXX,表示你的交叉编译器,这里./configure执行结果为:

configure: Configured to build curl/libcurl:

  Host setup:       aarch64-unknown-none
  Install prefix:   /home/hesetone/Downloads/curl-7.72.0/rk3399_curl
  Compiler:         /usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
   CFLAGS:          -Werror-implicit-function-declaration -O2 -Wno-system-headers -pthread
   CPPFLAGS:        -isystem /home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/ -isystem /home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/include
   LDFLAGS:         -L/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/lib
   LIBS:            -lssl -lcrypto -ldl

  curl version:     7.72.0
  SSL:              enabled (OpenSSL)
  SSH:              no      (--with-{libssh,libssh2})
  zlib:             no      (--with-zlib)
  brotli:           no      (--with-brotli)
  zstd:             no      (--with-zstd)
  GSS-API:          no      (--with-gssapi)
  TLS-SRP:          enabled
  resolver:         POSIX threaded
  IPv6:             enabled
  Unix sockets:     enabled
  IDN:              no      (--with-{libidn2,winidn})
  Build libcurl:    Shared=no, Static=yes
  Built-in manual:  enabled
  --libcurl option: enabled (--disable-libcurl-option)
  Verbose errors:   enabled (--disable-verbose)
  Code coverage:    disabled
  SSPI:             no      (--enable-sspi)
  ca cert bundle:   no
  ca cert path:     no
  ca fallback:      no
  LDAP:             no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
  LDAPS:            no      (--enable-ldaps)
  RTSP:             no      (--enable-rtsp)
  RTMP:             no      (--with-librtmp)
  Metalink:         no      (--with-libmetalink)
  PSL:              no      (libpsl not found)
  Alt-svc:          no      (--enable-alt-svc)
  HTTP2:            disabled (--with-nghttp2)
  HTTP3:            disabled (--with-ngtcp2, --with-quiche)
  ESNI:             no      (--enable-esni)
  Protocols:        FILE GOPHER HTTP HTTPS SMB SMBS
  Features:         AsynchDNS HTTPS-proxy IPv6 NTLM NTLM_WB SSL TLS-SRP UnixSockets

然后执行make && make install,得到如下结果,也是lib/include/目录,复制到你的工程即可:

posted @ 2020-09-24 16:42  hesetone  阅读(2931)  评论(0编辑  收藏  举报