背景:在原有的項目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/
第一篇博文,寫得不好,多多指教