cocos2dx 2.2.6在arm64中release版本libcurl的bug

把2.2.6自带的TestCpp中配置改为支持arm64

run版本的Schmem设置为release

在iphone6的模拟器下运行,执行HttpClientTest中的TestGet
执行后抛出异常
HttpClient.cpp第286行出错

只要关闭了release版本的代码优化即可,低版本的iphone不存在这个问题。不知是不是libcurl库的支持不到位,求原因

好吧。解决了。是httpclient中的perform使用了int导致了64位下不能跑。把其相关的都改为了long即可。

diff文件如下,给有需要的人:
Index: extensions/network/HttpClient.cpp

— extensions/network/HttpClient.cpp (revision 1966)
+++ extensions/network/HttpClient.cpp (revision 1982)
@@ -94,10 +94,10 @@
}

-static int processGetTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *errorCode, write_callback headerCallback, void *headerStream);
-static int processPostTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *errorCode, write_callback headerCallback, void *headerStream);
-static int processPutTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *errorCode, write_callback headerCallback, void *headerStream);
-static int processDeleteTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *errorCode, write_callback headerCallback, void *headerStream);
+static int processGetTask(CCHttpRequest *request, write_callback callback, void *stream, long *errorCode, write_callback headerCallback, void *headerStream);
+static int processPostTask(CCHttpRequest *request, write_callback callback, void *stream, long *errorCode, write_callback headerCallback, void *headerStream);
+static int processPutTask(CCHttpRequest *request, write_callback callback, void *stream, long *errorCode, write_callback headerCallback, void *headerStream);
+static int processDeleteTask(CCHttpRequest *request, write_callback callback, void *stream, long *errorCode, write_callback headerCallback, void *headerStream);
// int processDownloadTask(HttpRequest *task, write_callback callback, void *stream, int32_t *errorCode);

@@ -141,7 +141,7 @@
request->release();
// ok, refcount = 1 now, only HttpResponse hold it.

  •    int32_t responseCode = -1;
    
  •    long responseCode = -1;
       int retValue = 0;
    
       // Process the request -> get response packet
    

@@ -329,7 +329,7 @@
}

 /// @param responseCode Null not allowed
  • bool perform(int *responseCode)
  • bool perform(long *responseCode)
    {
    if (CURLE_OK != curl_easy_perform(m_curl))
    return false;
    @@ -344,7 +344,7 @@
    };

//Process Get Request
-static int processGetTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *responseCode, write_callback headerCallback, void *headerStream)
+static int processGetTask(CCHttpRequest *request, write_callback callback, void *stream, long *responseCode, write_callback headerCallback, void *headerStream)
{
CURLRaii curl;
bool ok = curl.init(request, callback, stream, headerCallback, headerStream)
@@ -354,7 +354,7 @@
}

//Process POST Request
-static int processPostTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *responseCode, write_callback headerCallback, void *headerStream)
+static int processPostTask(CCHttpRequest *request, write_callback callback, void *stream, long *responseCode, write_callback headerCallback, void *headerStream)
{
CURLRaii curl;
bool ok = curl.init(request, callback, stream, headerCallback, headerStream)
@@ -366,7 +366,7 @@
}

//Process PUT Request
-static int processPutTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *responseCode, write_callback headerCallback, void *headerStream)
+static int processPutTask(CCHttpRequest *request, write_callback callback, void *stream, long *responseCode, write_callback headerCallback, void *headerStream)
{
CURLRaii curl;
bool ok = curl.init(request, callback, stream, headerCallback, headerStream)
@@ -378,7 +378,7 @@
}

//Process DELETE Request
-static int processDeleteTask(CCHttpRequest *request, write_callback callback, void *stream, int32_t *responseCode, write_callback headerCallback, void *headerStream)
+static int processDeleteTask(CCHttpRequest *request, write_callback callback, void *stream, long *responseCode, write_callback headerCallback, void *headerStream)
{
CURLRaii curl;
bool ok = curl.init(request, callback, stream, headerCallback, headerStream)
Index: extensions/network/HttpResponse.h

— extensions/network/HttpResponse.h (revision 1966)
+++ extensions/network/HttpResponse.h (revision 1982)
@@ -110,7 +110,7 @@
/** Get the http response errorCode
* I know that you want to see http 200 :slight_smile:
*/

  • inline int getResponseCode()
  • inline long getResponseCode()
    {
    return _responseCode;
    }
    @@ -153,7 +153,7 @@

    /** Set the http response errorCode
    */

  • inline void setResponseCode(int value)
  • inline void setResponseCode(long value)
    {
    _responseCode = value;
    }
    @@ -175,7 +175,7 @@
    bool _succeed; /// to indecate if the http reqeust is successful simply
    std::vector _responseData; /// the returned raw data. You can also dump it as a string
    std::vector _responseHeader; /// the returned raw header data. You can also dump it as a string
  • int _responseCode; /// the status code returned from libcurl, e.g. 200, 404
  • long _responseCode; /// the status code returned from libcurl, e.g. 200, 404
    std::string _errorBuffer; /// if _responseCode != 200, please read _errorBuffer to find the reason

};

楼主 好人一生平安!!

楼主 你 好 我刚也升级到了 cocos2dx 2.2.6 然后打包出来提交之后 还是给我发邮件说不支持64位 位不知道自己是哪个环节出了问题 希望楼主能指点迷津 能加位QQ吗236554262

碰到和LZ一样的问题,感谢LZ的答案

苹果审核 ,也是这个问题。。。
刚下载官方 github 下来,没有更新这个 。。。
来个官方人员 确认一下 …
@版主
@偶尔e网事

long ?

android 和 IOS 都OK 的么?

测试了一下 OK 。

好人一生平安~

谢谢,遇到跟lz同样的问题,解决了!!!

你们升级64位运行有无崩溃问题

楼主好人谢谢:896:

楼主和解决问题的人,我要感谢你,好人一生平安