curl在linux下交叉編譯動態庫遇到的問題及解決方案

最近在嘗試編譯curl庫,安裝了其所需的openssl庫,在交叉編譯curl庫的時候,按照網上給的配置教程,一步步來,最後出了問題,所以在這裏記錄一下自己的配置方法和問題解決方案:

參考:https://blog.csdn.net/andylauren/article/details/78821916

這篇博文配置安裝openssl都沒有問題,但是在交叉編譯curl庫的時候,博文的配置指令是:

CPPFLAGS="-I/home/linux/arm/openssl/ -I/home/linux/arm/openssl/include" LDFLAGS="-L/home/linux/arm/openssl/lib" LIBS="-ldl" ./configure --host=arm-linux CC=arm-linux-gcc CXX=arm-linux-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/linux/arm/curl
其中 --host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++配置交叉編譯器

我也是這麼配的,openssl安裝的庫路徑也和博文上設置的一樣,出現瞭如下圖的錯誤:

好不容易上面那個問題找到解決方案了,原來是在配置ssl時沒指定ssl的路徑,所以改後的配置指令如下:

CPPFLAGS="-I/home/linux/arm/openssl/ -I/home/linux/arm/openssl/include" LDFLAGS="-L/home/linux/arm/openssl/lib" LIBS="-ldl" ./configure --host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++ --with-ssl=/home/linux/arm/openssl/ --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/linux/arm/curl

再重新來編譯一遍(記得make之前先make clean一下),編譯通過了:

編譯過後,執行sudo make install,心情很激動,以爲不會有問題了吧,然鵝:

好吧,出現了../libtool: line 1722: arm-linux-ranlib: command not found這個問題。

以上問題解決了,make install前需要進到/home/gec/soft/curl-7.57.0/src目錄下再執行行sudo make install

 

在搜索問題解決方法時,瞭解了一下arm-linux編譯鏈各工具的功能含義,arm-linux工具的功能如下:

arm-linux-addr2line 把程序地址轉換爲文件名和行號。在命令行中給它一個地址和一個可執行文件名,它就會使用這個可執行文件的調試信息指出在給出的地址上是哪個文件以及行號。
arm-linux-ar 建立、修改、提取歸檔文件。歸檔文件是包含多個文件內容的一個大文件,其結構保證了可以恢復原始文件內容。
arm-linux-c++flit 連接器使用它來過濾 C++ 和 Java 符號,防止重載函數衝突。
arm-linux-gprof 顯示程序調用段的各種數據。
arm-linux-ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,並連接符號引用。通常,建立一個新編譯程序的最後一步就是調用ld。
arm-linux-nm 列出目標文件中的符號。
arm-linux-objcopy 把一種目標文件中的內容複製到另一種類型的目標文件中。
arm-linux-objdump 顯示一個或者更多目標文件的信息。使用選項來控制其顯示的信息,它所顯示的信息通常只有編寫編譯工具的人才感興趣。
arm-linux-ranlib 產生歸檔文件索引,並將其保存到這個歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標文件。
arm-linux-readelf 顯示elf格式可執行文件的信息。
arm-linux-size 列出目標文件每一段的大小以及總體的大小。默認情況下,對於每個目標文件或者一個歸檔文件中的每個模塊只產生一行輸出。
arm-linux-string 打印某個文件的可打印字符串,這些字符串最少4個字符長,也可以使用選項-n設置字符串的最小長度。默認情況下,它只打印目標文件初始化和可加載段中的可打印字符;對於其他類型的文件它打印整個文件的可打印字符。這個程序對於瞭解非文本文件的內容很有幫助。
arm-linux-strip 丟棄目標文件中的全部或者特定符號。

如果想更快捷的編譯curl庫,可以參考:https://blog.csdn.net/fangye945a/article/details/86500817

 

下面給出測試安裝好的curl環境的方法:

HTTP Post請求天氣信息(基於curl庫 ):https://blog.csdn.net/fangye945a/article/details/86530858

天氣服務器備忘:https://blog.csdn.net/fangye945a/article/details/86530182

我的測試結果:
指令:gec@ubuntu:/home/linux/opt/curl/bin$ ./curl -d "city=changsha&appkey=8010132dcf54491a4eaa387f4db61774" "https://way.jd.com/he/freeweather"

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章