You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 8下CMake编译找不到OpenSSL头文件core_names.h报错求助

问题根因

openssl/core_names.h 是 OpenSSL 3.0 及以上版本才提供的头文件,你当前环境默认优先级最高的OpenSSL是自行编译的1.0.2r版本,CentOS 8默认yum源安装的openssl-devel对应版本为1.1.1k,两个版本均未包含该头文件,编译阶段自然会触发找不到文件的报错。

解决步骤
  • 清理旧版本冲突
    先移除默认源安装的低版本OpenSSL开发包,避免链接阶段出现版本混乱:
    yum remove -y openssl-devel
    
    检查/etc/profile、~/.bashrc等环境变量配置文件,删除将/root/openssl-1.0.2r/builddir/bin加入PATH的配置行,执行source /etc/profile生效,确认which openssl不再返回1.0.2版本的路径。如果其他业务依赖这个1.0.2版本,也可以不删除环境变量,后续CMake配置时强制指定高版本路径即可。
  • 安装OpenSSL 3.x版本开发包
    CentOS 8默认源不提供OpenSSL 3的安装包,先启用epel与PowerTools源后安装:
    dnf install -y epel-release
    dnf config-manager --set-enabled powertools
    dnf install -y openssl3 openssl3-devel
    
    安装完成后可执行ls /usr/include/openssl3/openssl/core_names.h验证头文件是否存在,存在即代表安装正常。如果需要自定义编译选项,也可以自行下载OpenSSL 3.0+版本源码编译安装,注意安装时指定独立的安装路径,不要覆盖系统自带版本。
  • 修改项目CMake配置
    不要依赖CMake默认的OpenSSL查找逻辑,在CMakeLists.txt中显式指定OpenSSL 3的路径,示例配置如下:
    # 若为自行源码编译的OpenSSL3,将路径替换为你实际的安装前缀即可
    set(OPENSSL_ROOT_DIR /usr/lib64/openssl3)
    set(OPENSSL_INCLUDE_DIR /usr/include/openssl3)
    find_package(OpenSSL 3 REQUIRED)
    include_directories(${OPENSSL_INCLUDE_DIR})
    # 将your_target替换为你项目实际的编译目标名
    target_link_libraries(your_target ${OPENSSL_LIBRARIES})
    
  • 清理缓存重新编译
    进入项目构建目录,删除之前的CMake缓存后重新构建:
    rm -rf CMakeCache.txt CMakeFiles/
    cmake ..
    make -j$(nproc)
    

注意:如果编译时还是提示找不到相关头文件,可以在执行cmake时加参数-DCMAKE_VERBOSE_MAKEFILE=ON,查看实际编译命令里引用的头文件路径是否指向你配置的OpenSSL3目录,排查是否有其他全局配置覆盖了路径设置。

内容的提问来源于stack exchange,提问作者Bedirhan Ateş

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:21:23