c++ 编译 curl 报错 数组‘__curl_rule_01__’的大小为负 解决方法
程序员文章站
2022-04-29 20:20:23
背景:在原有的项目GCC编译环境下(arm-linux 32位),增加x86-linux 64位的编译环境,编译curl库的时候发生错误。 其他:编译服务器为64位Centos 编译错误提示 /include/curl/curlrules.h:142:3: 错误:数组‘__curl_rule_01_ ......
背景:在原有的项目gcc编译环境下(arm-linux 32位),增加x86-linux 64位的编译环境,编译curl库的时候发生错误。
其他:编译服务器为64位centos
编译错误提示
/include/curl/curlrules.h:142:3: 错误:数组‘__curl_rule_01__’的大小为负
__curl_rule_01__
解决过程:
1.在网上搜索得知是用64位的编译环境编32位的镜像时导致的:在 curlrules.h 。这个错误是故意强制作为检查数据类型大小的一部分。
2.尝试按网上修改:curl_sizeof_long 和 curl_sizeof_curl_off_t,但未解决问题。
3.灵机一动,因为提示是curlrules.h头文件出错,那么能不能直接换64位的头文件呢
用命令搜索 find /usr/include -name curlrules.h, 得知centos自身就有curl库,
所以直接把项目的头文件路径定到/usr/include,但是这影响到其他库的头文件路径;
4.再改良下,把整个curl文件夹拷贝到原include路径下面,为了避免与原先旧的curl冲突,把新的curl重命名为curl64
5.然后修改原码 把所有的 #include <curl/ 全局替换成 #include <curl64/ ,再编译,ok
总结:
1.如果不考虑旧的项目环境,直接替换curl的头文件
2.如果想其他项目的环境并存,则把64位的curl头文件拷贝到原include路径下并命名为curl64,再修改修改源码中的 #include <curl/ 全局替换成 #include <curl64/
第一篇博文,写得不好,多多指教