gkENGINE跨平台的問題總結

2022-04-29 12:36:08 字數 1754 閱讀 4328

總結了一下去年再作gkengine跨平台工作時,遇到的一些坑和解決方案。

ios支援c++的方式是c++(gcc編譯器)和objc混編

ios平台使用xcode作為「編譯器」和「偵錯程式」

visualstudio作為「開發ide」

利用vmware虛擬機器,在win7環境下開乙個mac虛擬機器,一切和ios真機/虛擬機器相關的問題在虛擬機器中搞定。

在win7下開乙個**託管倉庫,vmware橋接網路可以在mac os裡pull**。

android支援c++的方式是ndk。android2.3之後支援純原生**。

ndk的官方開發流是geek範兒:手寫mk檔案,呼叫windows版的gcc編譯器直接編譯出可在arm架構上跑的二進位制。然後使用gdb server進行真機除錯。

可以通過vs-android方案,將手寫mk檔案的步驟,變為熟悉的vs管理工程。通過msbuild擴充套件出乙個android平台(對應win32/win64)編譯選項。同時配合android-sdk和ant,可以直接生成用於真機安裝的apk包。

cocos2d-x

powervr sdk

l  d3d是用不了的,需要使用gles2來實現渲染器

l  輸入方式和windows是完全不同的,觸屏vs鍵鼠

l  ios和android的輸入訊息驅動方式也有區別,需要分別實現

l  執行緒api,linux可以用pthread

l  各種資料型別定義, 通過define的轉

l  win api,一部分win api可以用linux平台的函式封裝

l  模板

l  傳參行為

l  編譯器特性和關鍵字_stdcall _fastcall等等

l  switch case只支援8位... 被坑慘了

l  ndk 7對unicode支援不好,最終選擇了multibyte

l  atl, mfc… gkengine還好都沒有選用

l  各種第三方庫,有原始碼的可以嘗試編譯跨平台(rapidxml等等)

android支援動態鏈結(.so)

ios鎖死了動態鏈結,只能使用靜態鏈結(.a)

android的資料可以類似ios一樣,統一打進apk包中。安裝後直接位於apk程式位置。也可以放置於sd卡中,索引sdcard路徑的方法可能會根據機型有不同。

ios真機的檔案系統式hfs+,該檔案系統對檔名是大小寫敏感的! 而mac os可以是hfs,大小寫不敏感。這是乙個大坑。資源和路徑可能需要全部處理為小寫。

linux系統不支援「\」作為路徑分割,因此在路徑索引和源**中,一律要使用「/」。

渲染器需要使用opengl es/es2來實現。

在windows平台上可使用powervr sdk提供的gles2模擬庫來模擬,該庫是對opengl的封裝。cocos2d-x也使用這種方式。使用windows模擬器的最大優勢在於, 可以脫離於移動平台,直接在windows平台下開發。在發布里程碑版本時再針對移動平台編譯,解決部分問題。提高開發和除錯效率。

在android和ios中,opengles2的行為還稍顯不同。

在移動平台上,對這兩個標準庫都支援得很好。因此如果之前的工程如果大量的使用標準庫函式和物件來開發,跨平台時可以事半功倍。

移動平台的記憶體偏小,這一點需要十分注意。容易爆記憶體崩潰。

移動平台顯示卡支援的硬體解碼紋理格式各異:

etc :所有廠商支援 | 不支援alpha通道

pvr :powervr | alpha通道支援很爛

dds : nvidia

at2:  高通

跨平台路徑問題

在windows下的路徑分隔符和linux下的路徑分隔符是不一樣的,當直接使用絕對路徑時,跨平台會暴出 no such file or diretory 的異常。比如說要在temp目錄下建立乙個test.txt檔案,在windows下應該這麼寫 file file1 new file c tmp t...

跨平台路徑問題

在windows下的路徑分隔符和linux下的路徑分隔符是不一樣的,當直接使用絕對路徑時,跨平台會暴出 no such file or diretory 的異常。比如說要在temp目錄下建立乙個test.txt檔案,在windows下應該這麼寫 file file1 new file c tmp t...

Erlang程式的跨平台問題

用erlang寫出的程式,如果使用依賴某一作業系統的專有技術,會在其他系統上跑不起來。最近,學用mochiweb過程中,在windows的cygwin中遇到了這個問題。開啟瀏覽器,http localhost 8000 出現網頁,程式執行正常。但是,由於mochiweb是在linux上開發的,使用了...