2009-08-19 97 views
5

簡短問題:如何獲取兩個應用程序,一個用於英特爾和另一個ppc,並將它們打包爲一個通用二進制文件?從兩個應用程序創建一個「通用二進制」?

我對這個問題當前的想法:

我已閱讀雖然在通用二進制代碼的蘋果開發者文檔,並一直無法找到答案,因此它可能是不可能的。

由於原因,我不會進入這裏我有我的計劃的兩個應用程序(並列使用了Xtools編譯二進制普遍一次),一個是英特爾Mac和其他的Mac> = 10.3.9上運行PPC。共享資源不是問題。

我可以把MyProg_intel.app和MyProg_ppc.app放到一個zip文件中,然後以這種方式分發它;但這可能會導致我將要分發我的程序的許多人感到困惑。

回答

1

爲了創建通用二進制文件,您必須使用Xcode並選擇英特爾和PPC目標體系結構。據我所知,你不能只在事後將兩個不同的二進制文件放入一個.app文件中。

3

查看lipo的手冊頁。我相信你可以使用-create來獲取多個輸入文件並創建一個具有多種體系結構的單個輸出文件。

5

請參閱lipo工具。它會讓你縫合你的PPC和i386二進制文件。

另外,通過在Xcode中使用conditional build settings,可以避免不同體系結構的單獨目標。例如,如果您需要爲每個體系結構連接不同的二進制庫,這非常有用。

+0

lipo看起來像它可能是我的解決方案,但input_file期待二進制文件或其他類型的文件 - 不是.app(當我嘗試它說_無法映射輸入文件((os/kern)無效參數) _)。我的程序是用python編譯的,而且我的打包方法並沒有將每個東西都編譯成一個二進制文件,還有大量的依賴關係。 – marshallpenguin 2009-08-19 14:41:42

+1

您可以使用lipo合併二進制文件:lipo myapp_ppc.app/Contents/MacOS/myapp -output myapp_i386.app/Contents/MacOS/myapp將PPC端合併到英特爾應用程序中,然後您可以將其重新命名爲通用應用程序。 但其他海報更正確。在構建和鏈接每個架構之後,您應該首先創建應用程序通用性,而不是構建.app兩次並丟棄一次。 – cdespinosa 2009-08-19 15:40:34

+0

py2app已經生成了一個通用二進制文件。爲什麼不用CFLAGS,CXXFLAGS和LDFLAGS中的「-arch i386 -arch ppc」構建你的依賴關係? – 2009-10-08 10:22:39

1

Apple的開發人員網站上有一篇關於Building an Open Source Universal Binary的文章,它解釋瞭如何使用Xcode使用構建腳本「封裝」通用二進制文件。這可能是您達到理智的最佳途徑。您可以使用lipo,但從長遠來看,如果您要更新和維護您的應用程序,那麼擁有一個可以爲您帶來魔力的Xcode項目將佔用您很少的時間。

相關問題