[英]Explaining Clang dynamic/static library linking process
我正在構建自己的庫,並對最終的可執行文件鏈接過程的工作方式感到困惑。
我有一個使用CoreLocation標頭的MyLibrary.framework 。
當我將Mach-o type
設置為static
,即使沒有在“鏈接的框架和庫”中鏈接CoreLocation.framework ,框架也可以毫無問題地構建。
當我將MyLibrary.framework鏈接到我的iOS測試項目時,必須添加CoreLocation.framework ,因為否則會出現未引用符號錯誤。
為什么構建我的靜態庫不需要引用CoreLocation,為什么構建我的應用程序需要鏈接到CoreLocation? 那里發生了什么?
梅基的答案在這里:
很好地解釋了編譯/鏈接過程。 .a文件是.o文件的(.a)行。
每個.o文件不僅包含其具有的符號,還包含其所需的符號。
僅在可執行文件鏈接過程中,鏈接程序才會解析可執行文件中的所有符號,該文件引用了靜態庫,而靜態庫引用了CoreLocation庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.