軟體開發技術科普之二 Mac OS X共享庫

2021-04-13 04:48:36 字數 1560 閱讀 7931

windows、mac os x和linux的動態鏈結庫/共享庫各有千秋。在這裡簡單介紹下mac os x的共享庫。mac os x的核心是bsd和mach混合而成的。由於mach核心處理cpu相關的最核心的任務,包括執行緒排程等,因此mac os x的原生可執行檔案是mach-o(o是object的縮寫)格式。因此mac os x的共享庫也一般基於該格式。

mac os x除了有框架和包羅框架(又譯傘狀框架,兩者的副檔名都為.framework的包,在此不多做介紹)之外,還有兩種共享庫格式。一種的擴充套件名為.dylib,被稱為mh_dylib格式,是一種僅僅在記憶體中共享**的簡單的動態庫,它不能被其它**顯式的載入。一般在xcode直接建立的bsd、carbon或cocoa動態庫並進行編譯,就能得到這種庫。

另外有一種能被**(乙個程式或另乙個共享庫)顯式載入的「外掛程式」庫,它是.so的單一格式檔案,或者為.bundle的包(如果有相關資源的話,實際上包中的主程式也是.so格式的庫)。它被稱為mh_bundle。比如odbc driver在mac上一般應該被編譯為這種格式,這樣它才能被odbc driver manager(也是乙個共享庫,請參見

軟體開發技術科普之一

)顯式載入。ms office的mac版中的一些.bundle包也是這種格式的動態庫。

用xcode 2.2以上版本編譯mh_bundle有些麻煩,曾一度被懷疑為bug,並在國外一些知名蘋果軟體開**壇或郵件列表中有相關的討論,做法如下:

1、雙擊targets中的專案

2、彈出target info對話方塊,切換到build選項卡以修改其中的選項(每個選項均對應乙個gcc 4的編譯選項)

3、將mach-o type改為bundle

4、此時如在xcode 2.2以上(我用的是2.4)中編譯會遇到編譯器錯誤:-compatibility_version only allowed with -dynamiclib,無法link。

5、開啟target info對話方塊,在build面板中找到current library version項,預設值為1,單擊edit,清空隨後彈出的下拉對話單(sheet window)中的內容,注意直接將1刪除是沒用,xcode還會把它改回來。

6、再次編譯,遇到錯誤-current_version only allowed with -dynamiclib

7、回到target info對話方塊,找到並用同樣的辦法清空compatibility version。

8、第三次編譯,會顯示-single_module or -multi_module flags can only be used when -dylib is also specified錯誤。

9、再次回到target info對話方塊,在build面板中找到perform single-object prelink,將其選中。

10、這次編譯應該能通過了,在編譯前,最好將executable extension(副檔名)改為.so。

11、可以在build results視窗(單擊主視窗右下角──狀態列最右邊的鏈結)中,將編譯設定改為release,編譯之——成功!

原載:http://www.3exware.com/home/default.asp?id=22

LoRa技術科普

lora簡介物聯網應用中的無線技術有多種,可組成區域網或廣域網。組成區域網的無線技術主要有2.4ghz的wifi,藍芽 zigbee等,組成廣域網的無線技術主要有2g 3g 4g等。這些無線技術,優缺點非常明顯,可如下圖總結。在低功耗廣域網 low power wide area network,l...

密碼技術科普

密碼學家的六個工具 對稱密碼,公鑰密碼,單向雜湊函式,訊息認證碼,數字簽名,偽隨機數生成器。單向雜湊函式 也稱訊息摘要 單向雜湊函式可以實現完整性的檢查,可以辨別出 篡改 但無法辨別出 偽裝 當我們不僅需要確認訊息的完整性,同時還需要確認訊息是否真的來自傳送者,緊靠完整性檢查是不夠的,還需要進行 認...

跳頻技術科普

跳頻技術 frequency hopping spread spectrum fhss 在同步 且同時的情況下,收發兩端以特定型式的窄頻載波來傳送訊號,對於乙個非特定的接收器,fhss所產生的跳動訊號 對它而言,也只算是脈衝雜訊。跳頻是最常用的擴頻方式之一,其工作原理是指收發雙方傳輸訊號的載波頻率按...