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-devells /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ş
相关产品推荐
相关产品推荐

