在你的 iOS App中 使用 OpenSSL 庫

2021-05-26 02:56:11 字數 3883 閱讀 5206

當前最新版本1.0.0d。

2、編譯openssl

openssl是乙個c語言函式庫,為方便在xcode中使用,我們需要把它編譯為靜態庫。

開啟crypto/ui/ui_openssl.c進行編輯。 將

static

volatile sig_atomic_t intr_signal;

修改為:

static volatile int intr_signal;

否則會出現乙個編譯錯誤。

2.1 編譯 i386 庫(用於iphone模擬器)

執行以下命令:

mkdir ssllibs

將在使用者主目錄下建立ssllibs目錄。

切換到openssl-1.0.0a安裝(解壓)目錄,在其下建立3個子目錄:

cd openssl-1.0.0a

mkdir openssl_armv6 openssl_armv7 openssl_i386

執行目錄下的congfigure:

./configure bsd-generic32 --openssldir=/users

cc= gcc

修改為:

cc= /developer/platforms/iphonesimulator.platform/developer/usr/bin/gcc -arch i386

下一行,在cflag = 的後面增加

-isysroot /developer/platforms/iphonesimulator.platform/developer/sdks/iphonesimulator4.0.sdk

進行編譯:

make

make install

檢查 openssl_i386/lib目錄下 libcrypto.a 和 libssl.a 是否生成。

2.2 編譯 armv6 庫(armv6架構的ios使用)

先將編譯好的i386 庫儲存到 ssllibs 目錄:

mv openssl_i386 ../ssllibs

清除上次編譯的配置:

make clean

執行configure,重新生成新的編譯配置:

./configure bsd-generic32 --openssldir=/users

修改makefile 檔案,將 cc=gcc修改為:

cc= /developer/platforms/iphoneos.platform/developer/usr/bin/gcc -arch armv6

注意,這裡是iphoneos.platform而不是先前的 iphonesimulator.platform了。

同樣,需要在cflag=後面加上:

-isysroot /developer/platforms/iphoneos.platform/developer/sdks/iphoneos4.0.sdk

可以進行編譯了:

make

make install

檢查 openssl_armv6/lib 目錄下 libcrypto.a 和 libssl.a 是否生成。

2.3 編譯 armv7 庫(armv7 架構的 ios 使用)

先將先前編譯好的armv6 庫移到 ssllibs 目錄。

mv openssl_armv6 ../ssllibs

清除前面編譯配置:

make clean

執行configure配置編譯環境:

./configure bsd-generic32 --openssldir=/users

修改makefile 檔案,將 cc=cc修改為:

cc= /developer/platforms/iphoneos.platform/developer/usr/bin/gcc -arch armv7

注意,gcc 編譯選項 arch 由 armv6 變為了 armv7。

同時,在cflag=後面新增:

-isysroot /developer/platforms/iphoneos.platform/developer/sdks/iphoneos4.0.sdk

進行編譯:

make make

install

檢查 openssl_armv7/lib 目錄下 libcrypto.a 和 libssl.a 是否生成。

把編譯結果移到ssllibs目錄:

mv openssl_armv7 ../ssllibs

2.4 製作「通用」靜態庫

通用靜態庫是乙個「多架構」檔案,它是多個單一架構靜態庫的融合。

製作「通用」靜態庫需要使用mac os x 的 lipo 命令(具體請參考 mac os x 手冊)。

合併 libcrypto.a 庫:

lipo -create ../ssllibs/openssl_i386/lib/libcrypto.a ../ssllibs/openssl_armv6/lib/libcrypto.a ../ssllibs/openssl_armv7/lib/libcrypto.a -output ../ssllibs/libcrypto.a

合併libssl.a 庫:

lipo -create ../ssllibs/openssl_i386/lib/libssl.a ../ssllibs/openssl_armv6/lib/libssl.a ../ssllibs/openssl_armv7/lib/libssl.a -output ../ssllibs/libssl.a

3、在 xcode 專案的進行設定

把 openssl 的 include 目錄拷貝到專案資料夾。

把 libcrypto.a 和 libssl.a 檔案拷貝到專案資料夾。

把 libcrypto.a 和 libssl.a 檔案拖到專案的 framework 組中。

在target 上右鍵,選擇 get info,將 library search path 設定為:

$(inherited) 「$(srcroot)」

將user header search paths 設為 include。

選中always search user paths 選項。

現在可以在你的iphone專案中實用openssl了。

4、寫乙個應用 openssl 的小例子

「add

à existing frameworks

à others…」,把libssl.a和libcrypto.a加進來(即我們前面製作的「通用」庫)。

開啟專案info 的 build 設定,在 header search paths 中加入 openssl 的標頭檔案路徑,如:

/users//library/openssl-1.0.0a/include

注意,勾上「recursive」(搜尋子目錄)。

接下來寫點簡單的**。為求省事,我們把所有**寫在main.m裡:

#import

#include

void

md5(

nsstring

*);

intmain(

intargc,

char

*argv)

void

md5(

nsstring

* string)

nslog

(@"input string:%@"

,string);

nslog

(@"md5:%@"

,outstrg); }

你可以在控制台檢視程式的輸出:

input string:12345

md5:827ccb0eea8a706c4c34a16891f84e7b

在你的 iOS App中 使用 OpenSSL 庫

當前最新版本1.0.0d。2 編譯openssl openssl是乙個c語言函式庫,為方便在xcode中使用,我們需要把它編譯為靜態庫。開啟crypto ui ui openssl.c進行編輯。將 static volatile sig atomic t intr signal 修改為 static...

在AndroidStudio中使用OpenCV總結

簡單2步 模組的xml檔案 模組的gradle android 參好上面 然後run執行正常就可以下一步了,快了快了加油 arguments dandroid stl c shared 這裡是要新增的不然可能無法載入so 這裡是新增的 sourcesets 自己按照實際情況新增,只是我的總結。這裡我...

iOS app中使用webview的時機

使用hybrid開發,有幾個好處 1 web程式設計師參與開發 2 跨平台 3 快速更新 缺點主要是ui體驗比不上原生,比如滾動 彈性 拖拽 動畫等,web的效果現在還是比不上native。所以實際專案中,選擇哪種開發方式,取決於具體的需求 1 首頁 首頁容易有比較大的變化,一般資料也比較多,所以用...