1. 程式人生 > >編譯ios平臺的支援arm64和x86_64的通用openssl靜態庫

編譯ios平臺的支援arm64和x86_64的通用openssl靜態庫

文章轉自:

對於x86_64,wiki上有這句話:

x86-64 (also known as x64x86_64 and AMD64) is the 64-bit version of the x86instruction set

也就是說是64位的x86指令集。可以這樣理解armv7 , armv7s對應真機的32位處理器,i386對應模擬器的32位模擬器;arm64對應真機的64位模擬器,x86_64對應模擬器的64位模擬器。

下面是具體的編譯步驟:

先下載openssl的原始檔的最新版本

在openssl-1.0.1h目錄下建立5個資料夾,分別為arm64,armv7,armv7s,i386 , x86_64。它們分別用於存放指定平臺的庫檔案。

****編譯i386平臺

開啟/openssl-1.0.1h/crypto/ui/ui_openssl.c進行修改,將

static volatile sig_atomic_t intr_signal; 

修改為

static volatile int intr_signal;

開啟終端,進入到openssl-1.0.1h目錄,輸入命令

./configure BSD-generic32 --openssldir=/Users/Kyo/Desktop/openssl-1.0.1h/i386

(/Users/Kyo/Desktop/openssl-1.0.1h/i386為上面建立的i386資料夾路徑)

命令完成後,在openssl-1.0.1h目錄下會生成很多檔案,找到其中的makefile檔案並開啟,

編輯 makefile 檔案,將

CC= gcc

修改為

CC= gcc -arch i386


下一行CFLAG = ......的最後增加

-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk

(將紅色部分替換為你自己的sdk路徑)

在終端執行命令

make

再接著執行命令

make install

執行完成後,在i386資料夾下將會生成多個檔案和資料夾,/lib目錄下存放著編譯成功的庫檔案libcrypto.a 和 libssl.a 

****編譯其它平臺

接著我們需要編譯其它平臺的庫檔案,先在終端執行命令make clean 清空之前的配置和快取(發現執行這個命令並不能完成清空,我的做法是,先儲存上面生成的i386的庫檔案,執行make clean命令,然後刪除整個openssl-1.0.1h,重新解壓一個openssl-1.0.1h,然後再繼續其它平臺的庫檔案編譯)

既然是新解壓的openssl-1.0.1h,我們需要重新上面的幾個步驟,修改ui_openssl.c,執行configure命令,修改makefile檔案。

修改makefile跟i386中有所不同,

CC= gcc

修改為

CC= gcc -arch armv7

(其中armv7是指編譯armv7平臺下的庫檔案,如果改為arm64,就是編譯arm64平臺下的庫檔案)

下一行CFLAG = ......的最後增加

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -miphoneos-version-min=6.0

(i386中的路徑是iPhoneSimulator.platform,而其它架構都是iPhoneOS.platform,請注意x86_64是用iPhoneSimulator.platform的sdk)

在終端執行命令

make

再接著執行命令

make install

執行完成後,在armv7資料夾下將會生成多個檔案和資料夾,/lib目錄下存放著編譯成功的庫檔案libcrypto.a 和 libssl.a

如此重複生成各個平臺的庫檔案後,開始合併操作。

****製作“通用”靜態庫

執行終端命令合併 libcrypto.a 庫(確保終端中的路徑正確):

lipo -create /x86_64/lib/libcrypto.a /i386/lib/libcrypto.a  /armv7/lib/libcrypto.a /armv7s/lib/libcrypto.a /arm64/lib/libcrypto.a -output /libcrypto.a

(紅色部分替換為各個.a檔案的路徑,綠色部分替換為最終合併結果的輸出路徑)

執行終端命令合併 libssl.a 庫(確保終端中的路徑正確):

lipo -create /x86_64/lib/libssl.a /i386/lib/libssl.a /armv7/lib/libssl.a /armv7s/lib/libssl.a /arm64/lib/libssl.a -output /libssl.a

跟前面一樣,將路徑修改為正確路徑)

相關推薦

編譯ios平臺支援arm64x86_64通用openssl靜態

文章轉自: 對於x86_64,wiki上有這句話: x86-64 (also known as x64, x86_64 and AMD64) is the 64-bit version of the x86instruction set.  也就是說是6

iOS開發筆記之二十八——檢視靜態檔案支援arm64指令集架構的方法

1、蘋果store馬上就要開始對上架的app實行64位支援檢查了,截至到2015年2月1日。我們團隊維護開發的產品已經收到警告了, 工程裡用到了很多第三方的SDK,而這些SDK有的還不支援64位指令集。要從網上檢索最新的SDK並檢查是否支援64位架構,本篇文章就是介紹 怎樣

CEF編譯整理、支援MP3MP4的整理以及.NET的呼叫

由於chrome目前不支援NPAPI,專案中需要用到NPAPI控制元件,所以嘗試編譯低版本的chrome;關於3.2357.1287.g861c26e、3.2526.1373.gb660893、3.2623.1397.gaf139d7 的編譯版本,三個都支援MP3\MP4。下

PJSIP 【編譯平臺支援靜態

好久沒有寫部落格了,這也算是我步入新工作後的第一篇技術博文吧。在進入新公司前,早就有了技術層進入下一個迭代的準備,但很多事情是意想不到的,就像我以 C# 程式設計師的身份面試入職的,而今卻是一個全職的 IOS 開發。從 C# 到 Objective-C 的切換,還是有不少成本的,加上今年又推出了 Swift

iOS編譯OpenSSL靜態(使用指令碼自動編譯)

使用指令碼編譯:https://github.com/gitusrs/openssl-ios-build-shell-script 1、該指令碼只是一個OpenSSL編譯指令碼,使用時需要自己下載OpenSSL原始碼(openssl-*.tar.gz) 2、將 openssl-

windows下libcurl+openssl靜態編譯(32位64位靜態-不同openssl版本)

關於windows下編譯libcur相關的庫的文章是一大把,但是支援ssl的相關文章相對少一些,能按照對應要求編譯通過的更少,編譯成靜態庫的更少!再就是更不用說同事支援win64位系統的了,如下為我們開發過程中實際編譯通過的總結,一來希望後續使用人員能夠看到,為廣大網友做點實

android studio 利用gradlecmakelist生成c++靜態.a的方法總結

nts 需求 roi ++ build mat 頭文件 方法 ext android生成靜態庫的方法有兩種,一種是編輯android.mk文件,一種是編輯cmakelist文件。前一種沒做研究,因為用的ide是android studio,所以直接利用gradle調用cma

Linux編譯多個不同目錄下的檔案以及靜態、動態的使用

轉自:http://blog.csdn.net/luotuo44/article/details/16970841 一、  編譯不同目錄下的多個檔案 各個檔案的佈局如下:         head.h檔案的程式碼:

iOS將多個第三方sdk打包成靜態

前段時間做了個sdk打包成動態庫,發現使用非常方便各種好處也特別多,然後在最後將APP打包時出問題了,打包時候動態庫打不進去,想了很多辦法還是沒有解決,又因為趕時間所以只能重新打成靜態庫了。 在打成靜

Linux下編譯多個不同目錄下的檔案以及靜態、動態的使用

先看兩篇博文,作為基礎知識。如果對C/C++編譯連結過程都瞭解的話,可以跳過不看。一、  編譯不同目錄下的多個檔案各個檔案的佈局如下:       head.h檔案的程式碼:#ifndef  HEAD_H#define  HEAD_Hint add(int a, int b);  #endif  /*HEAD

[iOS]FFmpeg框架在iOS平臺上的編譯使用

_id hex ips selector 文件 str content pat tps 使用環境 Mac OS Yosemite 10.10.5 開發工具 Xcode 7.0 Terminal 需要的文件鏈接 gas-preprocessor yasm F

iOS開發~製作同時支援armv7,armv7s,arm64,i386,x86_64靜態.a

一、概要 平時專案開發中,可能使用第三方提供的靜態庫.a,如果.a提供方技術不成熟,使用的時候就會出現問題,例如: 在真機上編譯報錯:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86

iOS 指令集架構 armv6、armv7、armv7s、arm64x86_64、i386

clas 通用 圖片 pil 而後 支持 iphone 8 地址 目標 一、ARM架構   ARM架構過去稱作進階精簡指令集機器(Advanced RISC Machine,更早稱作:Acorn RISC Machine),是一個32位精簡指令集(RISC)處理器架構,AR

Mac OS X10.10_xcode6.1_ios8.1環境下,編譯lame靜態libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集

ces mod dir helper plain per 代碼 then -m 近期升級了系統到Mac OS X 10.10 而且更新了XCode6.1和iOS 8

iOS 音訊錄製AMRWAV互轉(支援64位)

公司專案中涉及到語音錄製的功能,在錄音格式方面遇到一些小問題現在拿出來與大家分享一下。 眾所周知,iOS 音訊錄製是不支援AMR格式的。但 Android 好像是預設是AMR格式的。兩邊格式不同必然有一方做出妥協的。這裡只簡單介紹一下iOS 格式轉碼的方法。 1、音訊錄製簡介 在AVFoun

React Native 極光推送的實現,支援AndroidiOS

在接到需求後對如何實現進行了預研,發現有極光官網維護的 jpush-react-native 和 React Native 中文網維護的 react-native-jpush 供我們使用,我選擇的是 jpush-react-native。 一,相關版本資訊 { "nam

為Android平臺編譯支援OpenCL的Opencv靜態

Opencv中封裝了OpenCL,直接下載的Opencv4Android SDK中提供了一些相關的庫,我們可以利用nm命令檢視這些庫是否包含opencl的相關函式。ocl整合在core中,所以我們直接檢視libopencv_core.a這個庫。 nm -D

ffmpeg的那點小事兒--編譯ffmpeg同時支援libx264(視訊編碼)libfdk(音訊編碼)

ffmpeg的那點小事兒--編譯ffmpeg同時支援libx264(視訊編碼)和libfdk(音訊編碼) 主要是shell指令碼編寫上的問題,直接上指令碼程式碼 #!/bin/bash #1、首先:定義下載的庫名稱 source="ffmpeg-4.0.2" #2、其次:定義".h/

qt *.pro 原始碼通用巨集定義(如條件編譯

*.pro中: DEFINES += _qt_msvc_2015 contains(DEFINES,_qt_msvc_2015){ QT += webengine QT