CLion上开发OpenSSL项目的配置

1. 编译OpenSSL库

首先在OpenSSL官网下载源码,然后进入到openssl目录,执行配置命令和编译命令。

git clone https://github.com/openssl/openssl.git

执行配置命令 ./Configure 和编译命令 make,执行配置命令 ./Configure 的时候,可以配置路径和环境变量,也可以不配置,选择其中一条执行即可。执行编译命令 make的时候,可能会涉及到权限不够的情况,需要加 sudo 提升权限。

cd openssl
./Configure
./Configure --prefix=/youpath/sslx --openssldir=/youpath/sslx
./Configure --prefix=/youpath/sslx --openssldir=/youpath/sslx '-Wl,-rpath,$(LIBRPATH)'
make install 
sudo make install

2. Clion上开发项目

关于Clion的环境配置参考Clion安装和配置,不再赘述。

创建C语言项目,修改CMakeLists.txt文件的配置,将OpenSSL加入到项目中。在 OPENSSL_ROOT_DIR 配置OpenSSL库文件路径,如果添加了环境变量就可以直接查询。

cmake_minimum_required(VERSION 4.0)
project(openssltest C)

set(CMAKE_C_STANDARD 99)

# 设置OpenSSL路径(使用Homebrew的安装路径)
set(OPENSSL_ROOT_DIR "/youpath/sslx")  # Intel Mac
# set(OPENSSL_ROOT_DIR "/opt/homebrew/opt/openssl")  # Apple Silicon Mac

# 告诉CMake在哪里查找
find_package(OpenSSL REQUIRED)

if(OpenSSL_FOUND)
    message(STATUS "Found OpenSSL ${OPENSSL_VERSION}")
    message(STATUS "Include dir: ${OPENSSL_INCLUDE_DIR}")
    message(STATUS "Libraries: ${OPENSSL_LIBRARIES}")
else()
    message(FATAL_ERROR "OpenSSL not found")
endif()

add_executable(openssltest main.c)
# 现代CMake方式:使用导入的目标
target_link_libraries(openssltest OpenSSL::SSL OpenSSL::Crypto)

main.c 中添加测试项目。

#include <stdio.h>
#include <openssl/evp.h>
#include <openssl/ssl.h>

int main() {
    printf("OpenSSL测试程序\n");

    // 检查OpenSSL版本
    printf("OpenSSL版本: %s\n", OpenSSL_version(OPENSSL_VERSION));

    // 简单的摘要测试
    EVP_MD_CTX *mdctx;
    const EVP_MD *md;

    OpenSSL_add_all_digests();

    md = EVP_get_digestbyname("SHA256");
    if (!md) {
        printf("未知的摘要算法\n");
        return 1;
    }

    mdctx = EVP_MD_CTX_new();
    if (!mdctx) {
        printf("创建上下文失败\n");
        return 1;
    }

    if (EVP_DigestInit_ex(mdctx, md, NULL) != 1) {
        printf("初始化摘要失败\n");
        EVP_MD_CTX_free(mdctx);
        return 1;
    }

    printf("OpenSSL初始化成功!\n");

    EVP_MD_CTX_free(mdctx);
    EVP_cleanup();

    return 0;
}
© phdlisl all right reserved,powered by GitbookUpdate in 2025-10-27

results matching ""

    No results matching ""