標籤:
ios交叉編譯dylib
因多個靜態庫,libes,libffmpeg,libmt. libpcap 使用不方便
在封裝一層介面,產生動態庫(c代碼),由IOS app上層調用。
注意:
ARCH 指定,可以指定多個,向下相容!
目前為止Apple行動裝置預設指令集-------------------------------------------------------------------------------------armv6 裝置: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Toucharmv7 裝置: iPhone3GS, iPhone4, iPhone4S iPad, iPad2, iPad3(The New iPad), iPad mini iPod Touch 3G, iPod Touch4armv7s裝置: iPhone5, iPhone5C, iPad4(iPad with Retina Display)arm64 裝置: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)
使用lipo -info命令 查看動態庫資訊
input file libmtsql.a is not a fat file
Non-fat file: libmtsql.a is architecture: armv7
也可以用readelf讀取頭資訊。
nm命令查看符號資訊,以下是一些常見的符號類型
| nm輸出字元 |
含義 |
| R |
Read only symbol. 比如在代碼中有一個const MAXDATA = 3095; 則MAXDATA就是一個Read only symbol |
| N |
這是一個偵錯符號 |
| D |
這是一個已經初始化的變數的符號。比如代碼中int i = 1和char *str = "Hello"則i和str都是這種類型的符號 |
| T |
Text段的符號。子程式都是這種符號,比如檔案中實現了一個函數function,則function就是這種符號 |
| U |
未定義的符號。如果檔案中引用了不存在的函數,則這些未定義的函數符號就是這種類型 |
| S |
未初始化的符號,比如全域變數int s;則s的符號就是此類型 |
當指定多個ARCH結構時, 同一個符號出現多個地址! 今日遇見問題: IOS_BASE_SDK="8.1"
IOS_DEPLOY_TGT="7.1"
DEVROOT = "$(shell xcode-select -p)/Platforms/iPhoneOS.platform/Developer"
SDKROOT ="$(DEVROOT)/SDKs/iPhoneOS$(IOS_BASE_SDK).sdk"
8.1的iphoneOS編譯的動態庫, APP 前台調用找不到符號 提示Undefined symbols for architecture armv7s reference from。 前台是在越獄開發環境theos 編譯的。
懷疑:兩種串連符號地址不同
ios交叉編譯dylib