首页 > 其他分享 >cmake管理的代码工程添加openssl库

cmake管理的代码工程添加openssl库

时间:2024-01-22 17:23:19浏览次数:32  
标签:CMake OpenSSL OPENSSL openssl 添加 cmake include find

提问:

我写了一个C++的代码,用的cmake来管理的代码。

我的C++代码里面用到了 #include <openssl/ssl.h> 。

我在cmake里面有 include_directories(/usr/include), 因为openssl在/usr/include目录下面。

cmake是编译一个 sylar2023的动态库,动态库里面要包含ssl里面的文件或方法或者库。

我需要再cmake里面如何修改?

现在错误提示是动态库里面找不到 openssl里面定义的方法。

错误日志如下: ../lib/libsylar2023.so: undefined reference to `SSL_free'

 

chatgpt回答:


在CMake中正确配置 OpenSSL 库和头文件,以及链接到你的动态库是很关键的。下面是一个简单的示例 CMakeLists.txt 文件,以确保正确设置 OpenSSL 的链接和头文件:

cmake_minimum_required(VERSION 3.10)
project(sylar2023)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

# 添加你的源文件
add_library(sylar2023 SHARED your_source_files.cpp)

# 查找 OpenSSL 库
find_package(OpenSSL REQUIRED)

# 添加 OpenSSL 头文件目录
include_directories(${OPENSSL_INCLUDE_DIR})

# 链接 OpenSSL 库
target_link_libraries(sylar2023 ${OPENSSL_LIBRARIES})

# 设置输出目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

在这个示例中,find_package(OpenSSL REQUIRED) 用于查找 OpenSSL 库,include_directories(${OPENSSL_INCLUDE_DIR}) 用于添加 OpenSSL 头文件目录,target_link_libraries(sylar2023 ${OPENSSL_LIBRARIES}) 用于链接 OpenSSL 库。

请确保在 CMakeLists.txt 中添加这些配置,并替换 your_source_files.cpp 为你的实际源文件列表。

如果你使用的是非标准的安装路径,你可能需要手动设置 OPENSSL_INCLUDE_DIROPENSSL_LIBRARIES 变量,以确保 CMake 能够正确找到 OpenSSL。可以使用 cmake --help-module FindOpenSSL 来查看更多有关 find_package(OpenSSL ...) 的信息。

 


 

 

解释:

 

在CMake中,find_package(OpenSSL REQUIRED) 是用于查找 OpenSSL 库的CMake模块。这个命令会尝试在系统中找到并加载 OpenSSL 库的相关信息,包括头文件路径、库文件路径以及其他配置信息。

具体而言,find_package(OpenSSL REQUIRED) 的操作包括以下几个方面:

  1. 查找 OpenSSL 库: CMake 会在系统的标准路径中查找 OpenSSL 库,包括 /usr/include/usr/lib 等。如果 OpenSSL 安装在非标准路径下,你可能需要设置 CMAKE_PREFIX_PATHOPENSSL_ROOT_DIR 等变量,以告诉 CMake 在哪里查找。

  2. 提取库的信息: 一旦找到 OpenSSL 库,CMake 将提取相关的信息,包括头文件路径、库文件路径、版本号等。

  3. 设置变量: CMake 会设置一系列与 OpenSSL 相关的变量,例如 OPENSSL_INCLUDE_DIR 用于指定头文件的路径,OPENSSL_LIBRARIES 用于指定链接时需要的库文件。

  4. 报告结果: 如果找到 OpenSSL 并提取了必要的信息,find_package 将返回 TRUE,否则返回 FALSE。使用 REQUIRED 参数可以确保如果 OpenSSL 未找到,CMake 将在这一步产生错误并停止配置。

通过使用 find_package(OpenSSL REQUIRED),你可以在 CMakeLists.txt 文件中轻松地集成 OpenSSL,而不必手动指定头文件路径和库文件路径。这有助于确保你的项目在不同系统上的构建过程中能够正确找到并链接 OpenSSL。

   

标签:CMake,OpenSSL,OPENSSL,openssl,添加,cmake,include,find
From: https://www.cnblogs.com/music-liang/p/17980514

相关文章

  • 添加虚拟列
    constgridRef=grid.getReference();if(!gridRef)returngrid.getStore().on('beforeload',function(store,records,successful,eOpts){grid.getStore().getModel().addFields([{name:'tf_allocateAmount',......
  • vscode windows CMakePresets.json
    vscode在windows下使用Ninja编译配置,使用VisualStudio编译环境。来源:CMakePresets.json参考:在VisualStudio中使用CMake预设进行配置和生成--示例文件CMakePresets.json{"version":2,"configurePresets":[{"name":"base","......
  • 模仿Jmeter,给Fitnesse添加执行脚本(groovy)的能力,变相增加if、for、switch等Fixture。
    实验效果!definescript{{{{logs.add(v1);for(inti=0;i<10;i++){logs.add(i);}logs.add(v2);outMap.put("v3","5555");logs.add(true||false);Assert.equals(param,&qu......
  • linux添加systemctl服务
    1.添加服务cat>/etc/systemd/system/bigdata_sr_detection.service<<'EOF'[Unit]Description=bigdata_sr_detectionAfter=network.target[Service]WorkingDirectory=/webser/bigdata_sr_detectionExecStart=/usr/bin/java-jar/webser/bigdata_sr_......
  • 【秀米教程】设置背景渐变色,添加渐变色
    添加渐变色1、点击控件,直到出现属性栏2、点击【“+”号】-【渐变色】-【输入代码】-【加入调色板】3、此时调色板最下面就会出现新的渐变色代码看不懂?linear-gradient()函数用于创建一个表示两种或多种颜色线性渐变。渐变轴为45度,从蓝色渐变到红色linear-gradient(45de......
  • Linux 安装最新版本的 CMake
    一、卸载系统老版本的CMake$sudoaptautoremovecmake二、下载最新版本CMake官网:Download|CMake三、安装$sudobash./cmake-3.28.1-linux-x86_64.sh--prefix=/usr/--skip-license......
  • FastAPI学习-30 项目代码中添加自己的日志内容
    前言前面一篇【FastAPI学习-29uvicorn使用log_config参数设置logger日志格式】已经学会了配置uvicorn的日志。如何在fastapi项目代码中添加自己的日志呢?添加日志创建一个logger实例,名称为"fast"fromfastapiimportFastAPIimportlogginglogger=logging.getLogger(......
  • 给应用添加动画
    属性动画的使用 概述属性动画,是最为基础的动画,其功能强大、使用场景多,应用范围较广。常用于如下场景中:一、页面布局发生变化。例如添加、删除部分组件元素。二、页面元素的可见性和位置发生变化。例如显示或者隐藏部分元素,或者将部分元素从一端移动到另外一端。三、页......
  • 使用hf-mirror下载数据集时需要添加参数 --repo-type dataset
    在国内下载huggingface可以使用hf-mirror加速下载,一般的使用方法可以参见:https://hf-mirror.com/上的介绍。我在使用hf-mirror下载时,参照网站第一种方法,指定仓库名称和本地下载地址下载时,发生了报错,错误如下:报错指出我们有正确的repo_id和repo_type,对于这两个参数一头雾......
  • 在 .net 8 Blazor Identity 中添加Claim
    .net8BlazorIdentity使用IndividualAccount模版时,默认的UserInfo只有Id,Email和UserName。如果想让客户端共享更多用户信息,可以使用自定义的ClaimsPrincipalFactory。代码如下:publicclassFlowYogaClaimsPrincipalFactory(UserManager<YourCustomUserClass>userMana......