1. 程式人生 > >Linux環境下openssl交叉編譯、安裝和裁剪

Linux環境下openssl交叉編譯、安裝和裁剪

最近的專案需求中依賴libcrypto和libssl庫,所以需要編譯安裝openssl0.9.8e,花了差不多一天的時間終於成功安裝和裁剪,現在總結並分享個人的方法,貼出來供大家參考和指正。

方法如下(不同的平臺要根據實際環境更改相應的編譯工具):

一、配置:

./config no-asmshared--prefix= <dir>

說明:no-asm  在交叉編譯過程中不使用匯編程式碼程式碼加速編譯過程。

shared  生成動態連結庫。

 --prefix      指定生成lib include bin目錄的路徑,不修改此項則預設為OPENSSLDIR目錄。 

二、 修改Makefile:

(這些修改也可以在config配置中使用相應引數來更改,具體怎麼做請自己查相應資料,我是直接修改Makefile的)

在Makefile中找到相應引數,其後面的內容修改如下:

1、 PLATFORM=mips //注意修改此值為你產品硬體平臺,如arm、mips等等,我所使用的平臺為mips,我使用的是mips平臺編譯工具。

2、把所有的 –march=pentium 去掉(三處)。

3、指定所使用的編譯工具:

             CC =  ........./mipsel-linux-uclibc-gcc
             PEX_LIBS=
             EX_LIBS=  -ldl
             EXE_EXT=
             ARFLAGS=
             AR=  .........../mipsel-linux-uclibc-

ar$(ARFLAGS) r
             RANLIB=  .........../mipsel-linux-uclibc-ranlib
             PERL=  /usr/bin/perl
             TAR=  tar
             TARFLAGS=  --no-recursion
             MAKEDEPPROG=  gcc

說明

1、此處的mipsel-uclibc-gcc為交叉編譯工具,根據實際情況更改為你自己平臺下的編譯工具即可,比如:arm-linux-gcc。注意AR和RANLIB也要作相應修改。

2、不同平臺的編譯器編譯出來的庫檔案大小可能不一樣。(我要兩種平臺下編譯出來的庫檔案相差0.5M的大小)。

三、make

四、make install

        以上操作成功後會在你指定的目錄下生成四個資料夾,在其中的lib目錄下可找到所需要的 XXX.so動態庫檔案。

五、裁剪

      在嵌入式平臺上,如果使用openssl的標準方法,編譯出來的libcrypto.so和libssl.so會比較大,大約為2.1M多和436K,為了節省空間,可以使用如下方法進行裁剪:

       1、靜態庫:

./config--prefix=/home/zqjun/openssl5350 no-shared no-zlib no-asm no-threads no-sse2no-compno-dso no-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipherno-md2 no-md4 no-mdc2 no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdhno-store no-ripemd no-des no-rc4 no-bf no-cast no-dsa no-dh no-ssl no-ssl2no-ssl3 no-tls no-perlasm

2、動態庫:

.config--prefic=/home/zqjun/openssl5350 shared no-zlib no-asm no-threads no-sse2 no-compno-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipher no-md2 no-md4 no-mdc2no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdh no-store no-ripemd no-des no-rc4no-bf no-cast no-dsa no-dh no-ssl no-ssl2 no-ssl3 no-tls no-perlasm

注意

1、動態編譯時不能出現no-dso引數,因為編譯過程中有些函式需要連結相應動態庫。

2、編譯完成後使用XXX-strip把相應的符號去掉,安裝後的庫會更小一些。

創建出Makefile後,再按照上面編譯時的修改方法修改makefile中相應的引數值就可以了。

注意事項:

1、在linux上用make編譯或用make install重新安裝之前最好先用makeclean清除上一次安裝所生成的所有的檔案,以免因之前的錯誤遺留的檔案導致編譯安裝不成功。

       2、注意引用庫的順序為:-lssl -lcrypto,如果為-lcrypto –lssl,編譯時會出現錯誤。

       3、openssl所涉及到的演算法介紹見部落格:

       4、參考書箱和文件:《Openss安裝指南》《OpenSSL使用指南》。