Linux 上 libcurl庫 curl_easy_perform Crash(signal 11 - SIGSEGV)

#PS:要轉載請註明出處,本人版權所有

#PS:這個只是 《 我自己 》理解,如果和你的

#原則相沖突,請諒解,勿噴

system info :Linux 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

安裝libcurl的方法

sudo apt install libcurl4-openssl-dev  libcurl3

實際遇到的問題

在一個ARM_Linux的程序中,涉及到用curl_easy_perform上傳json數據到後臺和用curl_easy_perform模擬表單上傳帶圖片和文件的數據。
在上傳的過程中,出現了讓人費解的情況:在上傳json數據的時候一切正常,但是上傳帶圖像的表單數據的時候,出現了訪問非法地址的問題(signal 11 - SIGSEGV)。

網上的一系列可能導致此問題的原因

1 curl_global_init()和curl_global_cleanup() 調用線程不安全,可能會導致程序異常退出,需要注意。
2 多線程環境下,https請求時,由於libopenssl 不支持多線程,出現crash,這裏需要在調用libcurl之前,先設置openssl的 互斥鎖 回調接口,這樣才能保證線程安全。
3 libcurl庫的debug和release混用的問題,就是說release程序用release庫,debug程序用debug庫。

結論

經過測試,發現就是第三個原因導致的我程序崩潰,可是爲何debug和release只對在上傳表單的時候crash起作用,而在post上傳普通數據的時候無異常?這裏就留個有緣人去測試吧,希望哪個大佬,找出原因了告訴我!!!
#PS:請尊重原創,不喜勿噴

#PS:要轉載請註明出處,本人版權所有.

有問題請留言,看到後我會第一時間回覆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章