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/目錄,復制到你的工程即可:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM