在编译arm64的curl库时出现了__curl_rule_01__ is negative问题,发现是#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1,具体就是CurlchkszEQ(long, CURL_SIZEOF_LONG)计算出了问题。也就是对对CURL_SIZEOF_LONG的定义与系统得到long长度不一致。类型通过sizeof计算时不匹配导致。原有curlbuild.h中对各个arm平台定义不够全面。针对arm64在curlbuild.h中增加:
#if defined(aarch64)
define CURL_SIZEOF_LONG 8
define CURL_TYPEOF_CURL_OFF_T long
define CURL_FORMAT_CURL_OFF_T “ld”
define CURL_FORMAT_CURL_OFF_TU “lu”
define CURL_FORMAT_OFF_T “%ld”
define CURL_SIZEOF_CURL_OFF_T 8
define CURL_SUFFIX_CURL_OFF_T L
define CURL_SUFFIX_CURL_OFF_TU UL
#endif
参考https://blog.csdn.net/oFengXin/article/details/57072632
32位,长度 8 改为4