2014-03-06 65 views
5

我使用了一個對zlib具有依賴性的開源渲染庫(Ogre3D)。如何爲arm64構建zlib

在XCode5中,我注意到當爲iOS構建時,如果通過ARCHS設置指示64位(arm64)體系結構,zlib將不會生成。

我得到關於LSEEK宏,readwrite函數有關「隱式函數聲明」的錯誤。我在gzlib.c擡頭LSEEK

#if defined(_WIN32) && !defined(__BORLANDC__) 
# define LSEEK _lseeki64 
#else 
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 
# define LSEEK lseek64 
#else 
# define LSEEK lseek 
#endif 
#endif 

我的猜測是這裏的東西是錯誤的,但我不知道是什麼。至於read()write()我不知道。

+0

我們使用的是官方的* zlib *庫(版本1.2.8截至昨天),但我們修改了'CMakeList.txt'文件,刪除了很多東西。也許我們將它與官方的* zlib *庫進行比較,以檢查是否有一些強制性的東西,以便在arm64上編譯我們需要添加的東西。 –

+0

BY'我'你的意思是Ogre3D,對不對?我沒有意識到使用了定製版本。 –

+1

是的,'*我們*'我的意思是Ogre3D(或者更具體的說我是Ogre3D開發團隊的一部分)。應該做得更清楚,抱歉。再說一遍:源代碼是正式版本,只是CMakeList.txt是不同的。 –

回答

1

在這種情況下,最簡單的解決方案不是自己編譯zlib,因爲它已經預裝了iOS SDK(也適用於arm64)。

這個latest commit修復了它也在官方的Ogre依賴庫中。

除此之外,還有來自this Ogre3D thread這個另一種選擇:

隨着ARCHS = ARCHS_STANDARD_INCLUDING_64_BIT,像ZLIP項目是失敗的。當我將其更改爲ARCHS_STANDARD_32_64_BIT時,他們構建了OK。我發現前者評估爲「armv7 armv7s arm64」,而後者評估爲「armv7 armv7s」。所以我認爲zlip不會爲arm64構建。

這將意味着OGRE3D部分編譯爲64位,其中爲一些依賴諸如zlib的停留32位。

+0

我認爲這只是描述了同樣的問題......它不適用於arm64。雖然_not_ building for arm64是一個選項,但是32位應用程序在64位iOS上引入了額外的開銷,它似乎不是一個長期的修復! –

+0

我看到並同意。然後看看這個答案。也許加入#include '解決了這個問題:http://stackoverflow.com/a/20143790/1947205 –

10

嘗試在gzguts.h中添加#include <unistd.h>

+0

解決了我的問題。謝謝。 – icethawless

+0

如果您在編譯OpenCV3.1.0的zlib時遇到問題,也可以使用。謝謝。 – LiveMynd

相關問題