c++ 編譯 curl 報錯 數組‘__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/

第一篇博文,寫得不好,多多指教

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM