用3.11.1的Curl解决了ipv6-only之后,iphone5C会崩溃。

替换了3.11.1的curl库跟源文件之后,ipv6的问题是解决了。
但出现另外一个问题,就是在iphone5C里面,curl_easy_perform(_curl)会崩溃。
调试不出来什么原因。
但如果我替换掉之前的curl库就没事。

std::string _data;  
 
void *_curl = curl_easy_init();
if (! _curl)
{
	CCLOG("can not init curl");
	return false;
}

CURLcode res;
curl_easy_setopt(_curl, CURLOPT_URL, path.c_str());
curl_easy_setopt(_curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(_curl, CURLOPT_WRITEFUNCTION, writeHttpRequest);
curl_easy_setopt(_curl, CURLOPT_WRITEDATA, &_data);
curl_easy_setopt(_curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(_curl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(_curl, CURLOPT_LOW_SPEED_LIMIT, LOW_SPEED_LIMIT);
curl_easy_setopt(_curl, CURLOPT_LOW_SPEED_TIME, LOW_SPEED_TIME);

res = curl_easy_perform(_curl);
curl_easy_cleanup(_curl);

iphone5C每次跑到倒数第二句代码的时候就崩溃了。

1赞

同样的报错…
坐等回复…

别沉。。有官方人士关注解决下不?

@minggo 需要帮忙看下这个问题,有不同的开发者反馈这个问题。

对对对. 求帮忙… 顺带说一下我这2天的流程…希望能提供一点思考…
我用的是Quick-3.3,在mac下工作
昨天到今天, 先后使用了 cocos官方提供的更新后的curl库(包括头文件,下同) , Quick-Cocos2dx-Community提供的解决ipv6 only的curl库, 以及自己手动编译了curl官方提供的库(7.49,7.48,7.43,编译时确认有配置–enable-ipv6)
情况如下:
官方curl库 && Quick-Cocos2dx-Community库 : 在curl_easy_cleanup的地方会crash,无论开不开NAT64共享都会;
自己手动编译的curl库: 不会crash, 但是在连NAT64网络测试时,会报各种超时/无法解析host的报错(我使用的是域名请求),同时正常ipv4网络下访问没问题.

大致情况就是这样,希望@minggo 大神能帮忙看下, 或者说一下你那边编译curl库的步骤,以供参考, 谢谢了

1赞

:kissing_heart: 雷锋。。

对了…
最迷的就是 我直接将src和res,拷贝到Quick-Cocos2dx-Community的工程下面, 在NAT64下访问网络,是没问题的,项目也可以跑.
但是我将那个工程里面的 curl库,头文件,quick-src/extra/network/CCHTTPRequest.h,quick-src/extra/network/CCHTTPRequest.cpp以及quick-src/extra/luabinding/cocos2dx_extra_luabinding.cpp,quick-src/extra/luabinding/cocos2dx_extra_luabinding.tulua 替换到quick目录下, 运行项目,还是会挂在curl_easy_cleanup那里,这让我有点百思不得其解哈. 可以说是已经把curl相关的文件全部替换了一遍了,可是得到的结果却不一样…
我都打算实在不行就直接把工程移植到Quick-Cocos2dx-Community上去了…

1赞

@minggo 再顶下,大神求解决。。

没必要替换源文件啊,引擎不同版本的代码肯定会有不一样啊。只需要替换库就好了。

我替换了好些个版本的curl库了 都没啥用 能麻烦说下你编译curl库的过程和版本么

通过这个仓库编译的:https://github.com/cocos2d/cocos2d-x-3rd-party-libs-src。注意看readme

按您说的,只替换库,不替换curl源文件,在5C里面还是会崩溃的。麻烦再看看。

1赞

好的 我去试试 thanks

我这边替换了curl 后 仍然连不上呢

1赞

人肉顶贴。。貌似还没看到解决办法。

3.11.1中的Curl使用的openssl也升级了,好像新版的openssl打包时少东西,你可以自己编译一个openssl的静态库替换掉3.11.1中的,看能不能解决。

我的问题解决了…
编译过好些个版本的curl库之后发现仍不能解决问题,
直接拿quick新建个工程发现没问题.
后面比较了一下发现是接入的某第三方语音sdk的.a文件导致的,引入了那个.a文件,curl就会报错
具体原因就无法查明了 . 导致我出问题的是亲加通讯云的libgotyeapi_c++11.a
估计是那份sdk里面也加入了curl吧.
btw…请问有没有办法在保留语音sdk的基础上解决这个问题?.. 我刚才去语音sdk的官网看了下…他们还没有提供新的sdk支持…

建议@yans 先使用一个纯净版本的cocos工程试试能不能用,如果能用的话再去逐步排查第三方sdk的问题

你用5C的手机去测试过?我们是自己写的远程请求,用到的curl。如果你没有自己写的话,引擎里的资源更新也是用到curl。

会不会是32位跟64位的区别,这边5s以上的手机都没有事,今天有渠道报过来iphone5也会崩溃。现在这个问题有解决的办法了吗?

@yans 如果是自己写的请求的话,那么得好好看一下你使用了。崩溃后有日志吗?