1. 程式人生 > >IOS生成同時支援armv7,armv7s,i386的靜態庫.a檔案

IOS生成同時支援armv7,armv7s,i386的靜態庫.a檔案

轉載自:http://www.cnblogs.com/wt616/p/IOS%E5%88%B6%E4%BD%9C%E9%9D%99%E6%80%81%E5%BA%93%E6%96%87%E4%BB%B6.html

許多第三方提供的.a檔案(一般是那些SDK),嵌入到我們的xcode專案後,生成不會報錯。

一部分粗心的SDK提供方,或者我們自己做的.a檔案,就會有報錯,常見的就是不是armv7結構,或者不是armv7s結構,如果在模擬器中執行,會報不是i386結構。

原因是:armv7是支援比iphone5舊的那些裝置,armv7s是iphone5或ipad4或者以後的新裝置,i386是mac的。

這些名字指的是處理器所用的指令集。

因此常常發生的是.a檔案要麼ipad mini可以Build成功,但iphone5不能Build成功。要麼就相反,讓人抓狂。

解決辦法是做一個全面支援各指令集的.a檔案。

前提是分別生成3個支援對應指令集的.a檔案。在Build靜態庫時,裝置分別選擇不同的真機以及模擬器,分別Build出來,備份到一個資料夾,並且取不同的名字。

此時可以用命令來檢查匯出的.a檔案所支援的指令集,lipo -info XXX.a ,要保證3個都是不同的才能進行下一步 ,注意:armv7s的顯示名是cputype (12) cpusubtype (11)

然後以命令 lipo -create XXXX_V7.a XXXX_V7s.a -output XXXX_all.a 合成他們成為新的.a檔案。

最後替換掉報錯的.a檔案即可。

相關推薦

IOS生成同時支援armv7,armv7s,i386靜態.a檔案

轉載自:http://www.cnblogs.com/wt616/p/IOS%E5%88%B6%E4%BD%9C%E9%9D%99%E6%80%81%E5%BA%93%E6%96%87%E4%BB%B6.html 許多第三方提供的.a檔案(一般是那些SDK),嵌入到我

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

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

iOS 生成靜態.a檔案

做iOS開發的同學們都知道,我們在開發的過程中經常用到一些第三方的庫,我們可以呼叫,但是看不見他們的原始碼。 有時我們不想別人看見我們的原始碼,也需要生成靜態庫,那怎麼生成呢? 首先,我們要建立一個CoCoa Touch Static Library工程 建立一個CoCoa

FFmpeg3.1.1編譯IOS靜態.a檔案

一、準備工作 1.下載最新的  gas-preprocessor.pl 複製gas-preprocessor.pl到/usr/bin下, 修改檔案許可權:chmod 777 /usr/bin/gas-preprocessor.pl 2.下載編譯指令碼/FFmpeg-i

iOS svn提交靜態.a檔案

使用命令列新增檔案 1.開啟終端,輸入cd,空格,然後將需要上傳的.a檔案所在的資料夾(不是.a檔案)拖拽到終端(此辦法無需輸入繁瑣的路徑,快捷方便) ,回車; 2.之後再輸入如下命令:svn add libOCMock.a,回車; 3.之後會出現:A  (bin)  

iOS 引用外部靜態(.a檔案)時,Category方法無法載入問題

問題: +[UIImage imageNamedFromBundleWithPNG:]: unrecognized selector sent to class 0x199812698 解決方法為:找到 target 的圖示,更改其 Other Linker Flags

iOS 打包靜態.a檔案

製作.a 1、新建專案 –> Cocoa Touch Static Library 2、新增庫需要包含的程式碼 3、將需要暴露的.h檔案暴露出來,.m會自動編譯到.a檔案中 4、分別選擇真機裝置和模擬器,command + B編譯,st

SVN 預設忽略靜態 .a檔案解決辦法

我是在向SVN伺服器上傳檔案時,遇到了這個問題,檔案上傳後,再下載後發現所有的.a檔案全部丟失,後來才知道是上傳檔案的時候.a檔案根本就沒傳上去,查詢原因才知道上傳的時候.a檔案被過濾掉了,後來找到了解決的辦法,大家可以借鑑下。 1、右鍵Finder,選擇 前往

ubuntu下gcc連結靜態.a檔案

    ubuntu系統下需要連結.a靜態庫檔案,查找了一些資料執行gcc命令發現都不能連結成功。最後自己通過一些測試,成功連結並且執行。     使用命令如下: gcc -o test dll_test.c -L  ./  SDKUseDll.a     說明: test

sqlite原始碼在mac編譯靜態.a檔案

下載最新原始碼: http://sqlite.org/sqlite-src-3071401.zip 解壓 ./configure 修改Makefile檔案 找到  sqlite3$(TEXE): $(TOP)/src/shell.c libsqlite3.la sqli

打包靜態.a檔案的方法(ar,ranlib,nm命令介紹)

這是由於最早在Unix系統上ar程式是單純用來打包多個.o到.a(類似於tar做的事情),而不處理.o裡的符號表。Linker程式則需 要.a檔案提供一個完整的符號表,所以當時就寫了單獨的ranlib程式用來產生linker所需要的符號資訊。也就是說,產生一個對linker合 格的的.a檔案需要做ar和ra

建立靜態.a檔案和動態.so

  示例五 檢視靜態庫中的檔案   [[email protected] lib]# ar -t libhycu.a   base64.c.o   binbuf.c.o   cache.c.o   chunk.c.o   codec_a.c.o   …   xort.c.o   [[email&#

ios開發之靜態(.a)的生成及使用

一、靜態庫定義:         在應用中,有些公共的程式碼需要反覆使用 的程式碼,希望隱藏程式碼的具體實現,可以把這部分程式碼做出靜態庫(.a檔案);如果提供庫的原始碼稱為開源庫(能看見.h也能看見.m檔案),不提供原始碼的庫稱為閉源庫(靜態庫,動態庫) 二、靜態庫的特

如何打包靜態.a文件 iOS

gson 打包成 round -1 creat public ima create 別人 代碼調試好了開始打包成sdk,下面是將要打包的FRSDK代碼(FRSDK.h暴露在外面有別人調用) 1.創建新工程(Xcode File-New-Project) 2.把下面的紅

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

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

Go 生成C動態.so和靜態.a

Go 生成C動態庫.so和靜態庫.a 原始碼 package main import "C" import "fmt" //export hello func hello(){ fmt.Println("hello world") } //export add func

vs2013中靜態lib檔案生成與使用

一、靜態庫lib檔案的生成 1.檔案  --  新建專案  --  Visual C++  --  win32專案,輸入專案名稱,例如:CMath。 2.專案右鍵  -- 新增 --  新建項 CMath.h  class CMath { public: CMath();

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

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

linux下靜態.a和動態.so檔案生成和使用

1.靜態庫是一些目標檔案(字尾名為.o)的集合體而已。 2.靜態庫的字尾名是.a,對應於windows作業系統的字尾名為.lib的靜態庫。 3.可以使用ar命令來建立一個靜態庫檔案。 來看一個例項,根據書中的程式碼簡化的,先看一看可以編譯成庫檔案的原始檔中的程式碼: /* test.c */ i

靜態資原始檔、xib、圖片打包處理,編譯生成靜態.a檔案太大縮小解決方法

給自己做個標記,詳情請訪問以下地址,親測過,沒問題的 另外,編譯生成的.a檔案太大,但又沒有冗餘的檔案可以刪除已減少體積,找了很久才找到解決辦法,如下: Build Settings-->Generate Debug Symbols將值設為NO