如何让rpm-mpi-hooks为CMake构建的RPM添加正确MPI版本信息?
Rocky9下CMake构建OpenMPI项目生成RPM的依赖标识问题
在Rocky9虚拟机上使用CMake构建基于OpenMPI的C++项目时,生成RPM遇到依赖匹配问题。自RHEL8起,MPI发行版要求在.spec文件的Requires和Provides段添加MPI专属标识以标记特定版本,这项工作本应由rpm-mpi-hooks包自动处理,但无法找到该包实际运行的相关信息。
当前生成的RPM安装时会报错:
Problem 1: conflicting requests
- nothing provides libmpi.so.40()(64bit) needed by myrpm
预期的依赖格式应为libmpi.so.40()(64bit)(openmpi-x86_64),但生成的RPM依赖仅为libmpi.so.40()(64bit)。查阅相关资料均指向Fedora的MPI打包指南,尝试过在.spec文件中使用宏、重命名二进制文件、迁移至特定MPI目录等方法,均未解决问题。
以下是用于测试的环境文件:
测试用CMakeLists.txt
cmake_minimum_required(VERSION 3.0) project(HelloWorld) add_executable(HWorld main.cxx) set(CMAKE_INSTALL_PREFIX "/usr") find_package(MPI REQUIRED) include_directories(SYSTEM ${MPI_INCLUDE_PATH}) target_link_libraries(HWorld ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}) install(TARGETS HWorld DESTINATION bin)
测试用.spec文件
Name: HWorld Version: 1 Release: 1%{?dist} Summary: Test script with MPI License: Test Source0: https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz %define debug_package %{nil} BuildRequires: gcc BuildRequires: make %description %prep %setup -q %build %cmake %cmake_build %install %cmake_install %files %{_bindir}/%{name} %post %changelog * ...
生成RPM后的依赖检查结果
$ rpmbuild -bb HWorld.spec $ rpm -qp --requires HWorld-1-1.el9.x86_64.rpm ... libmpi.so.40()(64bit)
内容的提问来源于stack exchange,提问作者Sadero
相关产品推荐
相关产品推荐

