#include <openssl/pem.h> // 報錯:找不到文件
// 但 /usr/local/ssl/include/openssl/pem.h 確實存在
手動下載 OpenSSL 源碼 ./config && make && make install 安裝到 /usr/local/ssl,編譯時 -I/usr/local/ssl/include 仍報錯。
/usr/lib/x86_64-linux-gnu/,頭文件在 /usr/include/openssl/(由 libssl-dev 提供)。/usr/local/ssl 導致**兩套 OpenSSL 共存**,包含路徑、庫路徑、運行時加載路徑極易混亂。-L/usr/local/ssl/include -I/usr/local/ssl/lib **參數反了**:-I 指定頭文件路徑,-L 指定庫路徑。sudo apt update && sudo apt install libssl-dev
之後直接編譯:
gcc -o try try.c -lssl -lcrypto
無需任何 -I/-L,系統默認路徑已配置好。
libssl3t64 / libssl-dev(Ubuntu 22.04+ 默認 OpenSSL 3)。update-alternatives 切換版本。./config --prefix=/opt/openssl-3.0 --openssldir=/etc/ssl,並設置 PKG_CONFIG_PATH=/opt/openssl-3.0/lib/pkgconfig,用 pkg-config --cflags --libs openssl 獲取正確編鏈參數。pkg-config --cflags --libs openssl
# 輸出示例:-I/usr/include -L/usr/lib/x86_64-linux-gnu -lssl -lcrypto
gcc -o try try.c $(pkg-config --cflags --libs openssl)
Ubuntu 開發 OpenSSL **直接 apt install libssl-dev**,別手動編譯安裝。系統包自動處理頭文件、庫、pkg-config、多架構路徑,省去 99% 的找不到頭文件/庫錯誤。編譯用 pkg-config 獲取參數最標準。