安装rspamd遇EVP_*等OpenSSL函数未定义引用错误求助
先明确:编译警告不影响当前链接错误
你遇到的编译警告(多行注释格式、未使用变量、函数无返回值)属于代码风格或潜在逻辑问题,不是导致链接失败的原因,可以暂时忽略,先聚焦解决链接错误。
链接错误核心原因分析
出现的EVP_MD_get_size、SSL_get1_peer_certificate等函数均为OpenSSL 1.1.x及以上版本的API,链接失败说明编译过程中没有正确关联到对应版本的OpenSSL库——即便重装了OpenSSL,也可能存在路径或检测逻辑的问题。
具体排查步骤
检查系统默认OpenSSL版本
执行openssl version,确认输出的版本是否为1.1.x及以上。如果是1.0.x版本,即便手动安装了新版,系统默认优先级仍可能指向旧版,需要调整。强制CMake使用指定版本的OpenSSL
如果手动安装了新版OpenSSL到自定义路径(比如/usr/local/openssl),重新运行cmake时添加以下参数:cmake ../rspamd -DENABLE_HYPERSCAN=ON -DENABLE_LUAJIT=OFF \ -DOPENSSL_ROOT_DIR=/usr/local/openssl \ -DOPENSSL_INCLUDE_DIR=/usr/local/openssl/include \ -DOPENSSL_LIBRARIES=/usr/local/openssl/lib替换路径为你实际的OpenSSL安装目录。
开启CMake编译日志,查看链接细节
添加CMAKE_VERBOSE_MAKEFILE参数重新配置,查看链接命令中的OpenSSL库路径:cmake ../rspamd -DENABLE_HYPERSCAN=ON -DENABLE_LUAJIT=OFF -DCMAKE_VERBOSE_MAKEFILE=ON make在输出的链接命令中,确认是否包含正确的OpenSSL库文件(比如
libssl.so、libcrypto.so),以及路径是否指向你安装的新版OpenSSL。检查系统库加载路径
确保新版OpenSSL的库目录被系统识别:export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH设置后重新运行cmake和make。也可以用
ldd librspamd-server.so命令查看该库依赖的OpenSSL文件路径,确认是否为预期版本。验证CMake缓存中的OpenSSL配置
进入编译目录,查看CMakeCache.txt文件,搜索OPENSSL相关条目,确认:OPENSSL_FOUND为TRUEOPENSSL_VERSION为1.1.x及以上OPENSSL_LIBRARIES指向正确的库文件路径
内容的提问来源于stack exchange,提问作者BrownianBridge

