首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

libcurl 升級導致 libcurl.so.3 缺失:軟鏈接修復與 C 語言調用示例

     編輯:PHP 相關知識

問題現象

系統升級 libcurl 到 7.19+,動態庫變為 libcurl.so.4,舊程序編譯依賴 libcurl.so.3,啟動報錯:error while loading shared libraries: libcurl.so.3: cannot open shared object file

一鍵修復:創建軟鏈接

# 32位系統
cd /usr/lib
ln -s libcurl.so.4 libcurl.so.3

# 64位系統
cd /usr/lib64
ln -s libcurl.so.4 libcurl.so.3

# 驗證
ls -l libcurl.so.3
ldd your_program | grep curl

libcurl 核心能力

  • 支持協議:HTTP、HTTPS、FTP、Gopher、Telnet、Dict、File、LDAP
  • 功能:HTTPS 證書驗證、HTTP POST/PUT、FTP 上傳、表單上傳、代理、Cookies、用戶認證
  • PHP 通過 --with-curl 編譯支持

C 語言完整調用示例(關鍵邏輯)

#include "curl/curl.h"
#pragma comment(lib, "libcurl.lib")

long writer(void *data, int size, int nmemb, string &content) {
    long sizes = size * nmemb;
    content.append((char*)data, sizes);
    return sizes;
}

bool CurlInit(CURL *&curl, const char* url, string &content) {
    curl = curl_easy_init();
    if (!curl) return false;
    
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); // 調試用
    return true;
}

bool GetURLDataBycurl(const char* URL, string &content) {
    curl_global_init(CURL_GLOBAL_DEFAULT);
    CURL *curl = NULL;
    
    if (!CurlInit(curl, URL, content)) return false;
    
    CURLcode code = curl_easy_perform(curl);
    if (code != CURLE_OK) return false;
    
    long http_code = 0;
    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
    if (http_code != 200) return false;
    
    // 保存文件示例
    double length = 0;
    curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &length);
    FILE *fp = fopen("1.gif", "wb");
    fwrite(content.c_str(), 1, length, fp);
    fclose(fp);
    
    curl_easy_cleanup(curl);
    return true;
}

關鍵選項表

選項作用典型值
CURLOPT_URL請求地址字符串
CURLOPT_WRITEFUNCTION數據回調函數指針
CURLOPT_WRITEDATA回調用戶數據指針
CURLOPT_FOLLOWLOCATION跟隨重定向1
CURLOPT_SSL_VERIFYPEER驗證SSL證書0(測試)/1(生產)
CURLOPT_POST啟用POST1
CURLOPT_POSTFIELDSPOST數據字符串/結構體

版本兼容性提醒

  • 軟鏈接僅解決運行時依賴,建議重新編譯鏈接新版本
  • API 可能有變更,檢查 curl_version_info()
  • 生產環境建議靜態鏈接或容器化鎖定版本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved