跳轉到內容

Xbox 360/Xbox 在 Mac 上的開發

來自華夏公益教科書,開放世界開放書籍

本文件介紹了配置 iBook 以編譯使用 OpenXDK 編寫的 C 程式碼並製作 Xbox 原生可執行檔案的過程。在撰寫本文時,作者已成功編譯了 Windows 可執行檔案,但尚未能夠將其轉換為 Xbox 可執行檔案。

所有這些步驟都相當直觀,儘管新手需要了解一些技巧來避開數小時的“谷歌搜尋”。該過程類似於在 Linux 上安裝 OpenXDK,但有所不同,因為在本例中我們使用的是 PowerPC 處理器。這意味著我們首先必須構建一個交叉編譯器。假設您知道如何訪問 shell。

DarwinPorts

[編輯 | 編輯原始碼]

DarwinPorts 是一種簡單地跟蹤和安裝開源程式到您的系統中的方法。它專為 Darwin 設計(顧名思義),使用它您可以下載 MingGW。當前版本的 DarwinPorts 是 1.2,它提供了一個方便的安裝程式包。安裝後,執行以下命令以更新內部可用埠列表

$ sudo port -d selfupdate

MingGW 編譯器和 Windows API 庫允許您編寫和編譯程式以在 i386 系統上執行。雖然您可以從網站下載您需要的任何內容的副本,但使用 DarwinPorts 為您下載正確的檔案是一個更好的選擇。要下載所需的工具,請執行以下命令

$ sudo port install i386-mingw32-gcc

這將下載、配置並安裝 gcc 交叉編譯器和工具到您的系統中。注意:此步驟將花費一段時間。

編譯錯誤

[編輯 | 編輯原始碼]

在撰寫本文時,安裝程式為 binutils 包執行 make 時會發生編譯錯誤。確切的錯誤列在下面

$.../work/binutils-2.15.91-20040904-1/gas/config/tc-i386.h:457: error: array type has incomplete element type

要解決此問題,請在準備構建時將編譯器更改為 gcc-3.3。

$ sudo gcc_select 3.3

然後,一旦 binutils 包成功編譯,請停止安裝(Ctrl+C)(安裝無論如何都會失敗)並將編譯器改回 gcc-4.0。然後安裝應該成功完成。

這是一個可選步驟。我只是透過編寫一個 Hello World!程式並在我的 Windows 機器上執行它來測試設定是否有效。hello.c 的內容如下所示

#include <stdio.h>

int main(int argc, char **argv)
 {
 	printf ("Hello\n");
 	return 0;
 }

然後編譯,就像普通的 gcc/++ 一樣

$ i386-mingw32-gcc -o hello.exe hello.c

這會生成一個 Windows 可執行檔案 hello.exe,它可以在 Windows 中本地執行。請注意,這僅測試交叉編譯器設定,而不是 OpenXDK。

OpenXDK 是一個用於開發將在 Xbox 上執行的應用程式的免費工具包。它包含一個完整的 libc 替換,使用 SDL 進行多媒體(聲音和網路目前不支援)並使用 gcc 編譯。

您可以從 SourceForge 下載最新版本。確保下載二進位制檔案 OpenXDK_#_bin.zip(其中 # 是版本)。注意:儘管它說它適用於 i386 平臺,但那是我們的目標系統,OpenXDK 不會(即使使用 i386-mingw32-gcc)在 Mac 上編譯。

Cxbe 與 OpenXDK 一起提供,位於 bin 目錄中。它負責將 Windows 可執行檔案轉換為 Xbox 可執行檔案。您將無法使用提供的那個,因為它適用於 Windows。

不幸的是,在撰寫本文時,OpenXDK_src 包中的 Cxbe 原始碼版本比 OpenXDK_bin 包中編譯的版本舊。在出現解決方法之前,我們將不得不將半完成的可執行檔案傳送到 Windows 機器並在那裡執行 Cxbe。

要編譯為 xBox 編寫的 C 程式碼,您需要一個冗長的編譯器標誌列表。以下是根據 OpenXDK 網站 調整的。這假設您在系統上有一個有效的 cxbe 版本。

# 已安裝的 OpenXDK 路徑
XDK = /usr/local/openXDK
# 交叉編譯器
CC = i386-mingw32-gcc
# cxbe 路徑(用於後處理)
CXBE = $(XDK)/bin/cxbe
SDLFLAGS = -DENABLE_XBOX -DDISABLE_CDROM
CC_FLAGSA = -g -std=gnu99 -ffreestanding -nostdlib -fno-builtin
CC_FLAGSB = -fno-exceptions -mno-cygwin -march=i386 $(SDLFLAGS)
INCLUDE = -I$(XDK)/i386-pc-xbox/include -I$(XDK)/include -I$(XDK)/include/SDL
CLINK = -nostdlib
ALIGN = -Wl,--file-alignment,0x20 -Wl,--section-alignment,0x20
SHARED = -shared
ENTRYPOINT = -Wl,--entry,_WinMainCRTStartup
STRIP = -Wl,--strip-all
LD_FLAGS = $(CLINK) $(ALIGN) $(SHARED) $(ENTRYPOINT) $(STRIP)
LD_DIRS = -L$(XDK)/i386-pc-xbox/lib -L$(XDK)/lib
LD_LIBS = $(LD_DIRS) -lSDL -lopenXDK -lhal -lc -lhal -lc -lusb -lxboxkrnl
all: default.exe
*.o: *.c
$(CC) $(CC_FLAGSA) $(CC_FLAGSB) $(INCLUDE) $<
default.exe: *.o
$(CC) -c $< -o $@ $(LD_LIBS) $(LD_FLAGS)
$(CXBE) -TITLE:"$@" -DUMPINFO:"default.cxbe" -OUT:"default.xbe" $@ >/dev/null
clean
rm -f *.o *.xbe *.cxbe *.exe

雖然 Mac 上對 Xbox 開發的支援有限,但由於使用 Linux 開發合法的 Xbox 可執行檔案,並且 Mac OS X 是基於 Unix 的變體構建的,因此有可能搭載 Linux 的支援資源,並(經過稍微修改)產生一個可行的解決方案來進行 Mac Xbox 開發。

參考文獻

[編輯 | 編輯原始碼]
[編輯 | 編輯原始碼]
華夏公益教科書