前陣子因為工作上需要,需要build Curl library帶OpenSSL library到armv7l板子上,順便簡單紀錄一下步驟。
環境: Ubuntu 18.04
如果沒有compiler,就先裝一下吧。我用的是 gcc-arm-linux-gnueabihf
sudo apt-get install gcc-arm-linux-gnueabihf
接著下載openssl,可以去官網抓 https://www.openssl.org/source/,我這裡是抓1.1.1l版
## curl下載openssl sourcecode
curl https://www.openssl.org/source/openssl-1.1.1l.tar.gz --output openssl-1.1.1l.tar.gz## 解壓
tar -xvzf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l/## 開一個資料夾放output的檔案
mkdir _output## 設定目標平台,輸出路徑以及編譯器
./Configure linux-elf no-asm shared --prefix=$PWD/_output --openssldir=ssl --cross-compile-prefix=arm-linux-gnueabihf-
## 編譯
make install
編譯完成之後會產生library跟binary executable,可以用file指令看是不是我們想要的檔案類型
接著就可以編譯Curl了
## 先回到根目錄(或是你喜歡的任何路徑),然後上官網下載source code並解壓縮
cd ~
curl https://curl.se/download/curl-7.79.1.tar.gz --output curl-7.79.1.tar.gz
tar -xvzf curl-7.79.1.tar.gz
cd curl-7.79.1/## 一樣先做一個輸出資料夾
mkdir _output## 接著設定編譯選項,可以自己看情況調整,最重要的是我們要設定SSL library的路徑跟指定輸出路徑,及編譯器
./configure --with-openssl=$PWD/../openssl-1.1.1l/_output --disable-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 --enable-shared --enable-static --host=arm-linux-gnueabihf --prefix=$PWD/_output
輸出應該會長成這樣
最後就是編譯然後就可以快樂地把編出來的檔案丟到你的裝置上跑了
make & make install
題外話,我在測試的時候有遇到make失敗,看起來是openssl library link不到,把library直接丟到compiler的lib 資料夾底下就可以解決
/usr/lib/gcc-cross/arm-linux-gnueabihf/7/../../../../arm-linux-gnueabihf/bin/ld: warning: libssl.so.1.1, needed by ../lib/.libs/libcurl.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/arm-linux-gnueabihf/7/../../../../arm-linux-gnueabihf/bin/ld: warning: libcrypto.so.1.1, needed by ../lib/.libs/libcurl.so, not found (try using -rpath or -rpath-link)Makefile:1458: recipe for target ‘all-recursive’ failed
Happy Coding!