2009-08-11 90 views
1

我最近在我的iPhone項目中添加了一個靜態庫(mobclix),它需要我將Base SDK設置爲3.0。據稱這個庫與2.2兼容,目前看起來確實如此。我將項目的部署目標設置爲2.2。那裏沒有問題。如何在iPhone項目中爲dylib指定兼容版本?

現在,我也在這個相同的項目中使用libxml2。顯然,OS 3.0中的libxml2.2.dylib比OS 2.X(分別爲版本10和9)更新。不過,我使用libxml2的代碼已經與OS 2.X附帶的libxml2版本兼容。由於我需要將Base SDK設置爲3.0,因此「兼容版本」/最低版本要求/依賴項會自動設置爲較新版本的libxml2。當我嘗試在OS 2運行應用程序,我得到這個運行時錯誤(顯然):

Dyld Error Message: 
    Library not loaded: /usr/lib/libxml2.2.dylib 
    Referenced from: /Users/Martijn/Library/Application Support/iPhone Simulator/User/Applications/4D5456DE-F297-4DF4-ACA6-DA8BBBBBA914/Luisterpaal.app/Luisterpaal 
    Reason: Incompatible library version: Luisterpaal requires version 10.0.0 or later, but libxml2.2.dylib provides version 9.0.0 

是否有可能在某處覆蓋版本要求? 或其他想法來解決這個問題?

+0

你的錯誤是由試圖在模擬器中運行它,這實際上在實際硬件上發生的呢?模擬器版本之間的二進制兼容性與實際iPhone OS固件之間的兼容性完全不同。 – 2009-08-11 08:35:28

+0

我還在等待崩潰報告。判斷可見的症狀(開始時崩潰的應用程序)這可能是問題... – 2009-08-11 08:50:18

+0

它也發生在設備上。 – 2009-08-11 16:20:51

回答

0

兼容性版本根據構建期間嵌入在當前SDK的dylib中的版本進行設置。我還沒有找到改變或覆蓋這個的方法。

但是,在Xcode目錄下的「帶庫的二進制鏈接」分支中,有一個選項可以將「弱」鏈接到一個dylib。這會在加載dylib(運行時)時跳過版本檢查。這是你的責任,然後只撥打現有的功能。調用不存在的函數會使應用程序崩潰。