2009-02-03 158 views
6

我想在我的iPhone應用程序中使用PLDatabase框架。我已經將框架添加到我的Xcode項目中。然而,當我跑我的應用程序,它崩潰,出現以下錯誤:如何將第三方框架添加到iPhone項目?

dyld: Library not loaded: @loader_path/../Frameworks/PlausibleDatabase.framework/Versions/A/PlausibleDatabase 
    Referenced from: /Users/todd/Library/Application Support/iPhone Simulator/User/Applications/BB3C66B2-A5BB-4329-B163-AB0072411AF1/Congress.app/Congress 
    Reason: image not found 

我不知道確切位置的框架需要駐留在磁盤上被發現。

謝謝

回答

10

iPhone不支持嵌入式框架的動態鏈接。儘管您可能會使模擬器工作,但它不會在設備上工作。如果您想使用代碼,您必須爲框架(libpldatabase.a)構建靜態庫,然後將它們鏈接到應用程序。

Xcode GUI沒有爲靜態鏈接提供一個很好的界面,您將需要在構建首選項(-lpldatabase -L/whatever/dir/it/is /中)中添加適當的標誌。

6

RE @mipadi:ZeroLink在Xcode 3.1中被刪除,而iPhone SDK不存在。正確答案是路易斯; iPhone在開發人員創建的應用程序中不支持動態加載的框架。

Xcode確實對靜態庫有很好的用戶界面;只需將它們拖入項目中即可添加到鏈接階段。沒有必要大驚小怪與鏈接器標誌。當你需要使用這些靜態庫提供的頭文件時(這時你需要手動添加頭文件搜索路徑),或者當靜態庫與可用的dylib衝突時(這是你必須手動添加-l標誌時) 。

8

實際上iPhone並不支持動態鏈接。事實是,由App Store安裝的應用程序無法動態鏈接。

應用商店/ ituned將程序安裝到/ private/var/mobile/...目錄中。任何打開的子程序中打開的程序都是chroot,打開時會剝奪某些權限。 chroot進程無法分叉,無法在後臺運行,無法加載動態庫,也無法將文件保存在磁盤的小保護區之外(除照片以外的照片目錄)。

也就是說,iPhone運行一個支持動態鏈接的現代操作系統就好了。 '越獄'的行爲實際上是在chroot jail外部安裝一個程序,然後可以執行fork和將文件保存到磁盤上的其他位置並加載動態代碼。

蘋果(和開放的iPhone社區)在手機上運行着大量程序(例如MobilePhone,Mobile Safari和SpringBoard應用程序),可以在後臺運行和加載庫。它們被放置在磁盤上的不同位置(經常是/ private/var/stash/Applications)。

因此......如果您想在應用程序商店中銷售應用程序,則無法加載動態庫。對大多數人來說,這意味着你根本無法加載它。但是,如果你想通過cydia(一個常見的越獄手機應用程序安裝程序)分發你的應用程序,那麼你可以逃脫越獄手機和加載你的dynaamic庫。事實上,由於iTunes安裝過程是罪魁禍首,正如你所知道的,你甚至不能從你自己的應用程序中加載一個dylib,你寫給你自己的電話......除非你越獄。

相關問題