1. 程式人生 > >Mac下編譯太陽神三國殺原始碼

Mac下編譯太陽神三國殺原始碼

Mac系統版本是10.13.2,Qt版本是5.11,參考官方博文:太陽神三國殺 Mac 版構建指南

  1. 安裝Qt5
    下載最新的Qt5安裝包qt-opensource-mac-x64-5.11.0.dmg,安裝步驟可參考博文 https://blog.csdn.net/qq_37486501/article/details/80632151
    安裝過程類似,只不過版本不同,這裡使用的版本是5.11。建立快捷方式可參考我的博文 Mac下在Qt5裡面測試liblua.a和libtolua.a庫

  2. 編譯swig
    因為太陽神三國殺原始碼介面用的Qt編寫,而武將技能和場景用的是LUA指令碼,將這兩種結合在一起的工具用的就是swig,

    swig下載地址
    這裡下載的是當前最新的原始碼swig-3.0.12.tar.gz檔案,開啟終端,使用命令將其解壓

tar -zxf swig-3.0.12.tar.gz

然後進入解壓目錄,進行配置

cd swig-3.0.12
./configure --without-pcre

注意這裡要看清楚,帶引數是兩個-,官網上不知是頁面顯示問題還是其他原因,我複製過來變成一個-了,結果就報錯:

./configure –without-pcre
configure: WARNING: you should use --build, --host, --target
configure: WARNING: invalid host type: –without-pcre
checking build system type... Invalid configuration `–without-pcre': machine `–without' not recognized
configure: error: /bin/sh Tools/config/config.sub –without-pcre failed

看到下面顯示證明配置成功了:

config.status: creating Makefile
config.status: creating config.h

The SWIG test-suite and examples are configured for the following languages:
perl5 php python ruby 

接下來就可以進行編譯了:

make
sudo make install

沒有出現錯誤就證明編譯成功了,接下來就可以編譯三國殺原始碼了

  1. 三國殺原始碼編譯
    首先下載原始碼,GitHub上有最新原始碼:三國殺原始碼下載

    解壓後進入原始碼的swig目錄,輸入命令:
cd swig
swig -c++ -lua sanguosha.i

得到sanguosha_wrap.cxx檔案後,就可以使用QtCreator開啟QSanguosha.pro工程了,開啟過程在官方都有說明,這裡就不再贅述了。直接說編譯過程,剛開啟工程就報錯了:
工程報錯
看一下.pro工程檔案出錯位置:
出錯位置
這份三國殺程式碼是依照Qt4寫的,而Qt5把declarative已經改為qml和quick了,所以這裡需要改一下:
修改新增模組
繼續編譯,又出錯了:
無法找到標頭檔案
看來不止需要修改工程檔案新增的模組,連類名都改變了,QtDeclarative變為QtQuick了,修改src目錄的pch.h檔案:
修改QtQuick類名
類似的還有roomscene.h和roomscene.cpp檔案,QDeclarativeEngine,QDeclarativeContext和QDeclarativeComponent在Qt5裡分離成Qml的QQmlEngine,QQmlContext和QQmlComponent了,對應修改一下就可以了:
標頭檔案修改
原始檔修改
改好後再次編譯,終於成功了,先別顧著高興,記得把一些資原始檔拷貝到執行檔案所在目錄啊。找到編譯生成目錄:
編譯生成檔案
看到這個有圖示的檔案,右鍵“顯示包內容”,就可以進入目錄中了,把
audio,diy,etc,font,image,lang,lua,skins,ui-script,qt_zh_CN.qm和庫檔案libfreetype_D.a,libfreetype.a拷貝到Contents/MacOS/目錄下,至於官網說的ai-selector,rule和sanguosha.qss檔案在原始碼裡並沒有找到。最後我到目錄檔案如下:
執行目錄檔案
趕緊執行程式試一下吧:
執行程式
提示了一個小問題:
字型問題
但是好在不影響程式執行,介面還是出來了:
三國殺介面
至於問題嘛,以後有空再分析下原始碼,我先殺一局去了,再見。。。