我將應用程序分爲庫部分和與庫鏈接的應用程序。 庫使用AFNetworking
,因此需要SystemConfiguration
和MobileCoreServices
框架。添加它們可以很好地構建流程和庫。將構建應用程序時未定義的符號分離爲庫和應用程序部分
爲什麼我需要將相同的框架添加到我的應用程序部分才能正確構建並且不會看到鏈接錯誤?
僅鏈接庫是不夠的嗎?
我將應用程序分爲庫部分和與庫鏈接的應用程序。 庫使用AFNetworking
,因此需要SystemConfiguration
和MobileCoreServices
框架。添加它們可以很好地構建流程和庫。將構建應用程序時未定義的符號分離爲庫和應用程序部分
爲什麼我需要將相同的框架添加到我的應用程序部分才能正確構建並且不會看到鏈接錯誤?
僅鏈接庫是不夠的嗎?
我假設圖書館是一個靜態圖書館。您只是在構建靜態庫時添加框架才能訪問包含文件;你沒有與框架鏈接。這是因爲靜態庫在構建時未鏈接;它只是一個目標文件的集合。在命令行中嘗試使用此方法列出的對象文件:
$ ar t /path/to/my/library.a
當靜態庫與應用程序二進制文件,你必須提供的庫和框架,鏈接,就如同在靜態庫中的目標文件有已成爲應用二進制源代碼樹的一部分。
想想靜態庫是一個簡單的對象文件集合,它應該對你有意義。
Apple的iOS框架包含dynamic shared libraries。 AFAIK,當我們的應用程序啓動時,會創建一個流程,並將該流程所鏈接的動態共享庫加載到內存中。如果動態共享庫已經加載到內存中(對於其他應用程序進程),它們將與我們的應用程序進程共享。這是每個流程活動。
由於靜態庫作爲應用程序二進制本身的一部分進行鏈接,並且不會創建單獨的進程,因此有必要通知運行時加載靜態庫鏈接的框架。因此,在應用程序中添加靜態庫所使用的框架也是合乎邏輯的。
喲需要添加這些框架,因爲該庫需要它們。 – rptwsthi