天天看點

【COCOS2DX通信(HTTP&SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 && 解決PTHREAD的CANCEL函數NDK不支援,找不到SOCKADDR_IN、HTONS等問題;

本篇介紹在cocos2dx中加入網絡通信相關代碼,然後編譯到android時出現的一些細節和需要注意的地方總結。不多廢話了,直接進入正題;

   1.  首先介紹在cocos2dx中使用pthread編譯時應注意:

由于ndk明确指明不支援 pthread_cancel() 函數,編譯的錯誤提示如下:

【COCOS2DX通信(HTTP&SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 && 解決PTHREAD的CANCEL函數NDK不支援,找不到SOCKADDR_IN、HTONS等問題;

解決方案:

使用 pthread_kill()  或者 return null; 兩種方法進行解決。

其中的差別如下:

pthread_exit() : 可以指定傳回值,以便其他線程通過 pthread_join()   函數擷取該線程的傳回值;

return:  線上程函數中使用 return,會退出線程;

這裡himi推薦使用 return ,直接 return null;

  2. 編譯提示找不到 sockaddr_in   與 htons等定義,錯誤提示如下:

【COCOS2DX通信(HTTP&SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 && 解決PTHREAD的CANCEL函數NDK不支援,找不到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>

先觀察錯誤的日志:

【COCOS2DX通信(HTTP&amp;SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 &amp;&amp; 解決PTHREAD的CANCEL函數NDK不支援,找不到SOCKADDR_IN、HTONS等問題;

在你使用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包;錯誤提示如下:

【COCOS2DX通信(HTTP&amp;SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 &amp;&amp; 解決PTHREAD的CANCEL函數NDK不支援,找不到SOCKADDR_IN、HTONS等問題;

    解決方案:

修改jni下的helloworld下的.mk檔案,整個路徑如下:

your project//android/jni/helloworld/android.mk

打開整個mk檔案,找到如下内容:

【COCOS2DX通信(HTTP&amp;SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 &amp;&amp; 解決PTHREAD的CANCEL函數NDK不支援,找不到SOCKADDR_IN、HTONS等問題;

修改成如下内容:

【COCOS2DX通信(HTTP&amp;SOCKET)相關編譯到ANDROID細節總結】編譯加入CURL關聯LIB與頭檔案 &amp;&amp; 解決PTHREAD的CANCEL函數NDK不支援,找不到SOCKADDR_IN、HTONS等問題;

其實就是添加了兩句話!但是要注意!

你仔細看添加的第一句下面一句中間的符号,之前是 “  :=  ”現在是 “+=”  一定要注意,這個問題困擾himi好幾個小時 = =。

 ok,基本這些足夠解決問題的啦~

從下一篇開始himi将開始寫 mac平台下的編輯器開發系列文章哦~

繼續閱讀