iOS靜 動態庫開發支援bitcode

2021-09-19 18:17:48 字數 1540 閱讀 7851

llvm架構

bitcode本質上就是llvm ir的位元組流格式,我們可以嘗試生成ir**,看一看廬山真面目。首先,建立乙個test.c:

#include int main(int argc, char **ar**) 

呼叫clang指令-emit-llvm:

clang test.c -s -emit-llvm -o test.bc
生成的test.bc**如下:

; moduleid = 'test.c'

source_filename = "test.c"

target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-s128"

@.str = private unnamed_addr constant [13 x i8] c"hello world\0a\00", align 1

; function attrs: noinline nounwind optnone ssp uwtable

define i32 @main(i32, i8**) #0

declare i32 @printf(i8*, ...) #1

!llvm.module.flags = !

!llvm.ident = !

!0 = !

!1 = !

framework支援bitcode就是在編譯好的目標檔案中增加乙個__llvm段用來存放編譯生成的中間**ir。應用支援bitcode的前提是專案中所有第三方庫都支援bitcode,否則就只能關閉bitcode選項。

bitcode選項在xcode工程配置中預設是開啟的,如果framework是純oc**,只需要在工程選項other c flags中增加-fembed-bitcode即可。如果framework依賴了其他第三方庫,需要所有第三方庫也需要支援bitcode。假如第三方庫使用clang編譯,需要增加編譯選項-fembed-bitcode

編譯完成後,通過otool命令檢視目標檔案是否包含存放bitcode的__llvm段:

otool -l *** | grep __llvm
如果已經包含bitcode,會有如下結果:

segname __llvm

segname __llvm

如果想要剝離掉bitcode,通過xcode提供的bitcode_strip命令也可以很方便的做到:

xcrun bitcode_strip input [ -r | -m | -l ] -o output

靜 動態庫的簡單製作

靜態庫 1.a.建立靜態庫專案 b1.配置支援的最低版本 b2.設定適配所有模擬器的架構 b3.建立乙個內容類 b4.新增公開檔案 2.生成4個.a檔案並且合併 分別按照debug環境和release環境,生成真機很模擬器的.a檔案 分別合成debug和release真機與模擬器的.a檔案 a.de...

靜 動態鏈結庫使用總結

編寫方法 visual studio為例 一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num...

動態鏈結庫使用 靜 動態鏈結庫使用總結

一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num1,int num2 int mult i...