本篇介紹在cocos2dx中加入網絡通信相關代碼,然後編譯到android時出現的一些細節和需要注意的地方總結。不多廢話了,直接進入正題;
1. 首先介紹在cocos2dx中使用pthread編譯時應注意:
由于ndk明确指明不支援 pthread_cancel() 函數,編譯的錯誤提示如下:

解決方案:
使用 pthread_kill() 或者 return null; 兩種方法進行解決。
其中的差別如下:
pthread_exit() : 可以指定傳回值,以便其他線程通過 pthread_join() 函數擷取該線程的傳回值;
return: 線上程函數中使用 return,會退出線程;
這裡himi推薦使用 return ,直接 return null;
2. 編譯提示找不到 sockaddr_in 與 htons等定義,錯誤提示如下:
出現此類問題,主要是頭檔案沒有加入,雖然在ios編譯環境不抱錯,但是編譯會出現此問題。
解決方案:
在使用這些函數的類中,加入如下兩個頭檔案:
1
2
#include "netdb.h"
#include "netinet/in.h"
3. curl.h 頭檔案找不到。注意,這裡是編譯出現頭檔案找不到的問題,如果你是xcode編譯找不到頭檔案請參考如下博文:(這裡講解的是在ndk編譯android過程中出現此類問題的解決辦法)
<a href="http://www.himigame.com/iphone-cocos2dx/870.html" target="_blank">【c/s通信互動之http篇】cocos2dx(client)使用curl與jetty(server)實作手機網遊http通信架構(内含解決curl.h頭檔案找不到問題)</a>
先觀察錯誤的日志:
在你使用curl的類中,雖然導入了curl類,那麼你肯定是include “curl/curl.h”導入的吧!ok,改變如下即可,指定到完整相對路徑即可:
"../../libs/cocos2dx/platform/third_party/ios/curl/curl.h"
4. 有時候編譯報錯,錯誤提示說 curl_global_init 、curl_easy_init、curl_easy_setopt等沒有定義undefined !這個問題是因為沒有加入curl關聯lib包;錯誤提示如下:
解決方案:
修改jni下的helloworld下的.mk檔案,整個路徑如下:
your project//android/jni/helloworld/android.mk
打開整個mk檔案,找到如下内容:
修改成如下内容:
其實就是添加了兩句話!但是要注意!
你仔細看添加的第一句下面一句中間的符号,之前是 “ := ”現在是 “+=” 一定要注意,這個問題困擾himi好幾個小時 = =。
ok,基本這些足夠解決問題的啦~
從下一篇開始himi将開始寫 mac平台下的編輯器開發系列文章哦~