標籤:灰色 報錯 rect ber run cti get 推斷 setting
環境:
ubuntu14.04
adt-bundle-linux-x86_64
android-ndk-r9d-linux-x86_64
cocos2d-x-3.0正式版
apache-ant 1.9.3
python 2.7(ubuntu內建)
加入環境變數
export ANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdk
export PATH=${PATH}:/$ANDROID_SDK_ROOT/tools/
export PATH=${PATH}:/$ANDROID_SDK_ROOT/platform-tools/
export NDK_ROOT=/home/yangming/adt-bundle-linux/android-ndk-r9d
export PATH=${PATH}:/$NDK_ROOT
export ANT_ROOT=/opt/apache-ant-1.9.3
export PATH=${PATH}:/$ANT_ROOT/bin.
終端下執行build目錄裡的install-deps-linux.sh安裝gcc等編譯須要的環境,這裡有硬性要求,gcc至少4.8,opengl至少1.5。低於標準可能編譯只是去。編譯過去也執行不了。
終端下執行setup.py,cocos new建立項目。這個各個平台應該都一樣的。
得到所看到的檔案夾
cd test/proj.linux/
進入linuxproject檔案夾,運行
cmake ..
產生makefile檔案。
開啟eclipse,匯入proj.linuxproject,選擇C/C++,選擇Existing Code as Makefile Project,選linux gcc
此時這個項目已經能夠直接編譯執行了,可是原始碼在檔案夾外看不到。我們再來引入原始碼。
按右鍵project->Properties->C/C++ General->Paths and Symbols->Source Location->Link Folder,依次匯入project檔案夾裡的Classes,Resources,cocos2d。cocos2d因為linuxproject裡有同名檔案夾。能夠改個名
如今project應該是這個樣子。開啟一個檔案,發現有非常多錯誤,
看一下錯誤的原因,以這個Director為例,我們開啟他的標頭檔,發現CC_DLL這個宏沒有被識別
這個宏是在哪裡定義呢。在各個平台各自的CCPlatformDefine.h裡。
能夠看到,因為
#if CC_TARGET_PLATFORM == CC_PLATFORM_LINUX
沒有成立,導致這個檔案的內容全都無效。我們能夠找一下CC_TARGET_PLATFORM。他在/test.linux/cocos2dsrc/cocos/base/CCPlatformConfig.h。這檔案中列出各個平台的編號。CC_TARGET_PLATFORM先被設定為0,再在以下推斷後重設。我們看到linux這行是灰色的。就是#if defined(LINUX)沒有成立。我們僅僅須要在Paths and Symbols裡加入LINUX參數和CC_DLL。LINUX值為1,CC_DLL值為空白。
,
必需要把Managed Build Setting 置於 GCC Built-in Compiler Settings之上,在Providers裡先取消GCC Built-in Compiler Settings,點Apply應用,再選中GCC Built-in Compiler Settings,再點Apply,回到Entries裡。Managed Build Setting就跑到 GCC Built-in Compiler Settings上面了
好。如今AppDelegate.cpp已經不報錯了。大部分檔案都正常了,但另一小部分還會報錯。比方HelloWorldScene.cpp
MenuItemImage這個類報錯。我們找到MenuItemImage.h。發現function這行報錯,std::function是c++11特性。我們須要讓cdt識別c++11特性。
找到functional檔案,這裡的問題和上面的平台式識別問題類似,#if __cplusplus >= 201103L這個推斷沒有成立,__cplusplus這個值預設值是199711L,我們須要在Paths and Symbols裡加入__cplusplus=201103L,同一時候加入-std=c++11,
這裡能夠點Export Settings匯出設定到xml,新project匯入就能夠
好,如今整個project都不報錯了,代碼提示也都能夠正常使用。我們點小鎚子build。開始編譯了。事實上這個project產生完makefile檔案後就能夠正常編譯,上面的報錯僅僅是eclipse cdt的設定問題,並非真正的錯誤。
編譯成功後,run as Local C/C++ Application,選MyGame,
成功。
自建類須要在CMakeLists.txt裡加入,又一次執行cmake,產生makefile才幹夠編譯
set(GAME_SRC proj.linux/main.cpp Classes/AppDelegate.cpp Classes/HelloWorldScene.cpp)
另一些莫名其妙的報錯,如Return has value, in function returning void, must implement the inherited pure virtual method。Invalid arguments ‘ Candidates are: ,Member declaration not found之類的,請更新CDT到最新版,我更新之後這些報錯都消失了
Ubuntu14.04+eclipse下cocos2d-x3.0正式版環境的搭建