2009-11-27 39 views
0

我想libpng的庫鏈接到我的iPhone應用程序,並且收到此錯誤:iPhone模擬器:「libpng.dylib,文件不是必需的體系結構」

ld: warning: in /opt/local/lib/libpng.dylib, file is not of required architecture 

這發生在我建立模擬器或設備。

但是,當我構建控制檯應用程序時,我可以在libpng中鏈接。

我在做什麼錯?有沒有不同的libpng.dylib我需要用於iphone開發?

回答

1

正如Chris Long所說,libpng在iphone上不可用。您可以將它編譯到您的項目中(如果它將爲ARM編譯),否則它將無法工作。 這裏是鉛:http://www.cloudgoessocial.net/2009/06/09/imagemagick-on-iphone-with-jpeg-png/

而且,備案,就可以寫出一個UIImage以PNG本身使用:UIImagePNGRepresentation(UIImage *image)

+0

該鏈接有一個libpng.a,其中包含i386和arm架構,這正是我所需要的。不幸的是,當我使用這個文件時,它仍然給我和上面一樣的錯誤,甚至引用了我從項目中刪除的「/opt/local/lib/libpng.dylib」。 – abtree

1

這是從互聯網上下載的libpng.dylib文件嗎? iPhone開發人員不允許使用外部動態庫。

我不知道libpng是否可用,但以下是如何檢查。對在目標名單的程序名稱

  1. 雙擊。
  2. 單擊框架列表下的加號按鈕並嘗試找到它。不要忘記小寫字母的名字出現在「Z」後面。

如果不存在,則不能使用它。嘗試找到一個靜態庫並從源代碼編譯它。它必須專門針對iPhone模擬器(英特爾)和iPhone(ARM)的架構進行編譯。

+0

這是從macports安裝的libpng.dylib。我嘗試過靜態鏈接,但沒有成功。 Libpng不在可用框架的列表中。 – abtree

3

你不能在iPhone上使用dylibs,您將需要靜態編譯。話雖如此,你看到的錯誤是個別問題。

你在雪豹上開發嗎?如果是這樣,那麼你建立的默認庫可能是64位。模擬器需要32位庫。您可以通過運行文件,反對檢查:

file /opt/local/lib/libpng.dylib 

如果你沒有看到類似:

(for architecture i386): Mach-O dynamically linked shared library i386 

那麼你將無法再使用它。將庫重建爲靜態i386庫,您應該可以在模擬器中使用它。如果它是一個基於autoconf的版本this博客文章解釋瞭如何構建並具有可以使用的shell腳本。

+0

謝謝!我在雪豹,我的libpng確實是64位。這甚至沒有跨過我的腦海。現在這一切都變得更有意義。 – abtree

相關問題