2011-04-19 72 views
1

我最新的Mac應用程序從Mac App Store中被拒絕。可可32位和64位二進制文​​件內應用程序

基本上它沒有工作,因爲應用程序中包含一個自包含的unix可執行文件。 我之前在應用程序中包含了一個二進制文件,該應用程序位於Mac App Store中,但這個unix二進制文件給我帶來麻煩。

我已經在i386機器上編譯了這個二進制文件的2個不同版本,而在x86_64機器上編譯了這個二進制文件。 使用 「文件APPNAME」,我得到了64位二進制

Mach-O的64位可執行文件x86_64的

和32位二進制

的Mach-O可執行i386的

在運行時,我嘗試執行正確的二進制文件,但我注意到似乎並不重要?我使用哪個二進制文件,我可以在i386機器上執行x86_64,並且工作正常。

我的應用程序構建設置是默認項目(標準32/64位英特爾)隨附的內容。

問題是我應該試圖運行32位二進制文​​件,當我的應用程序在i386機器上運行?
爲什麼我的x86_64二進制文件在i386機器上運行時工作?

謝謝,約翰。

+1

你怎麼知道'i386機器'只是i386?另外,爲什麼不是通用構建? – 2011-04-19 07:45:04

+0

我使用「uname -a」檢查了i386機器,它說i386,但我不知道它可以運行其他架構? – 2011-04-19 07:50:06

+1

IIRC uname可以告訴內核體系結構,而支持64位的機器可以啓動32位內核,但在一些可支持64位的Core 2 Duo機器中這是必需的,但EFI卻不支持。運行'sysctl hw.cpu64bit_capable' - 如果機器具有64位功能,則顯示1,否則顯示0。 – 2011-04-19 07:53:24

回答

4

爲什麼不將Unix工具構建爲通用二進制文件?然後操作系統將根據機器的體系結構選擇正確版本的二進制文件。

編輯 - 添加我的評論作爲正確答案的一部分。

您需要構建i386和x86_64二進制文件。顯然,你需要爲這兩種體系結構構建exe和所有的依賴關係。對於i386體系結構,在任何地方都可以使用gcc flag -arch = i386。然後你可以使用lipo來組合這兩個二進制文件。

+0

我想簡單的答案是,我不是100%確定如何。該工具是httrack,我很難得到正確的依賴關係。我使用這個命令[./configure --prefix =/opt/local --with-zlib =/opt/local --enable-shared = no]我需要的大事是二進制文件不依賴其他庫,所以它會完全獨立運行。我如何編譯i386和x86_64? – 2011-04-19 07:46:19

+2

閱讀'man lipo'來查看如何鏈接通用二進制文件。 – user57368 2011-04-19 07:56:41

+1

您需要構建i386和x86_64二進制文件。顯然,你需要爲這兩種體系結構構建exe和所有的依賴關係。對於i386體系結構,在任何地方都可以使用gcc標誌「-arch = i386」。然後你可以使用lipo來組合這兩個二進制文件。 – JeremyP 2011-04-19 08:07:07

2

你讓事情太複雜了。您不需要64位機器來構建64位二進制文​​件,在64位機器上構建32位二進制文​​件也不是問題。

GCC和XCode easilly支持32位通用或32位/ 64位通用映像的構建,因此您不必擔心運行正確的映像。

+0

XCode正在爲我創建通用應用程序,工作正常。我已經在我的應用程序中包含了一個unix-binary,我已經從命令行編譯過。我有這個應用程序的x86_64和i386版本,但出於某種原因,我有問題讓這個二進制文件在不同的體系結構上正常工作。現在已經使用lipo來結合他們,謝謝你的幫助。 – 2011-04-19 08:11:46

相關問題