cmake错误:Could not find a configuration file for package “Eigen3“

感谢盛齐师兄指导。该博客记录了师兄的解决思路和原理讲解。

在编译某一开源工具包时,使用cmake编译报错:

CMake Error at /(我的文件路径)/cmakelist.txt (find_package):Could not find a configuration file for package "Eigen3" that is compatible with requested version "3.3"

在cmakelist中我们设定了寻找eigen包,且在find_package中限定了eigen库的版本不低于3.3. 在编译中报错说找不到3.3版本的eigen库。下述问题的解决思路和相关原理:

1 解决思路

1.1 使用sudo apt-get install libeigen3-dev安装eigen库

在终端输入:

sudo apt-get install libeigen3-dev

这是首先想到的办法。但是,使用该方法安装后编译,仍然报错。我们需要检查这个办法所安装的eigen库是否为cmakelist所要求的3.3版本。

1.2 检查eigen库版本

在cmakelist.txt中插入如下命令:

(安这个包的硬盘拆掉了,暂时写不出来。后面有空再补上这段代码)

第一段find_package在电脑中搜索eigen包,当怀疑cmake找到的包的版本不对时可以用这个办法查看;

第二段当找到指定名字的包后,输出包的相关信息,以查看cmake所找到的包是否是我们想要的那个。

根据输出结果,我们发现,找到了eigen3,但不是所要求的eigen3.3,说明使用apt-get安装的包不行。

1.3 源码编译安装eigen3.3

在eigen官网下载我们想要的版本:

http://eigen.tuxfamily.org/index.php?title=Main_Page

当然也可以直接clone:

git clone https://gitlab.com/libeigen/eigen.git

总之我们下载了想要的eigen源码。之后就是惯常的安装。首先建立build文件夹,进入:

mkdir build
cd build
# 建立build文件夹并进入

编译,安装:

cmake ..
make
sudo make install
make blas

完成安装。

但是,当我们再次编译前述某工具包时,仍然报相同的错。这就说明,cmake似乎并没有找到我们安装的新版本eigen,似乎找到的仍然是旧版本eigen。如果是这样的话,我们也有对应的办法。下面我们就来验证这个猜测。

1.4 检查Eigen3Config.cmake

为了查看cmake找到的包,惯常做法是查看config.cmake文件。这里就是查看Eigen3Config.cmake文件。

搜索这个文件名,找到。它的默认位置是在/usr/lib/cmake 中。

打开看,果然,eigen库是3.2.9版,不是我们新安装的3.3版。而解决办法也很多

法1:替换eigen库,修改.cmake文件。

这一段是eigen3库的位置,如果替换好了eigen库的话,就不需要修改。

set (EIGEN3_DEFINITIONS  "")
set (EIGEN3_INCLUDE_DIR  "${PACKAGE_PREFIX_DIR}/include/eigen3")
set (EIGEN3_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/include/eigen3")
set (EIGEN3_ROOT_DIR     "${PACKAGE_PREFIX_DIR}")

这一段是eigen3库的版本号,4行全部修改掉。

set (EIGEN3_VERSION_STRING "3.3.7")
set (EIGEN3_VERSION_MAJOR  "3")
set (EIGEN3_VERSION_MINOR  "3")
set (EIGEN3_VERSION_PATCH  "7")

法2:使cmakelist查找的.cmake文件不指向默认位置,而是我们前面编译eigen3,3产生的新的Eigen3Config.cmake。只需要在cmakelist.txt里查找eigen3的find_package前加入一句:

set(Eigen3_DIR "home/(eigen3.3的文件路径/build)")

再次编译这个工具包,终于不报错找不到指定版本的eigen库了,改报别的错了。

2 原理

 cmake查找一个包的基本流程如上图所示。我们前面版本号报错就是出在了cmakelist.txt里要求的版本号和默认位置的config.cmake里提供的版本号矛盾所致。

所以,我们前面提出的解决办法就很好理解了。无非是暗度陈仓(更改config.cmake)的位置,或者狸猫换太子(替换默认位置的config和eigen库内容)

### 回答1: 这个错误提示是因为找不到名为 "eigen3config.cmake" 或 "eigen3-config.cmake" 的包配置文件。可能是因为您没有安装 Eigen3 库或者安装的位置不正确。您需要检查 Eigen3 库的安装情况,并确保其安装位置正确。如果您已经安装了 Eigen3 库,但仍然出现此错误,请检查您的环境变量和路径设置是否正确。 ### 回答2: 出现这样的问题,一般是由于编译程序所需要的"eigen3"库没有被正确安装或导入路径不正确。因此,我们需要检查以下几个方面: 1.检查是否正确安装了"eigen3"库: 我们可以通过以下命令检查该库是否被正确安装: ``` sudo apt-get install libeigen3-dev ``` 如果未安装该库,请使用上述命令进行安装。 2.检查导入路径是否正确: 如果"eigen3"库已正确安装,但仍然报错找不到相应配置文件,那就要检查该库所在的 导入路径是否已正确添加。在CMakeLists文件中添加以下代码,将该库所在的路径添加到CMake搜索路径中: ``` find_package(Eigen3 REQUIRED) include_directories(${EIGEN3_INCLUDE_DIR}) ``` 其中,${EIGEN3_INCLUDE_DIR}是该库所在的导入路径。 3.重新生成编译文件: 完成以上步骤后,重新生成编译文件: ``` mkdir build cd build cmake .. make ``` 如果重新生成编译文件后仍然无法解决问题,可以尝试重新编译并安装"eigen3"库,或者使用其他版本的该库。 ### 回答3: 这个错误信息意味着你的CMake项目在构建过程中需要用到“eigen3”包的配置文件,但系统无法找到对应的文件路径。 "eigen3"是一个C++线性代数库,用于矩阵和向量计算。如果你的项目需要使用这个库,就需要在CMakeLists.txt文件中添加对它的依赖。常用的做法是通过find_package命令来寻找这个库的配置文件。 当你使用find_package(eigen3)命令寻找这个库的时候,CMake会自动到系统搜索路径下查找"On Unix-like systems" 的包配置文件。然而,如果你在系统中并没有安装这个库,或者它的配置文件没有放在CMake可以搜索到的路径下,就会出现上述错误信息。 解决这个问题有很多种方法,下面列出几个可能的解决方案: 1. 如果你没有安装“eigen3”库,可以尝试用包管理器(比如apt-get或brew)进行安装,然后再重新构建你的项目。 2. 如果你已经安装了这个库但仍然遇到问题,可以使用“-DCMAKE_PREFIX_PATH=<path/to/eigen3>”参数来指定库的安装路径,这样CMake就能够找到它。 3. 如果你已经确定该库的配置文件存在,但CMake仍然无法找到它,你可以手动将它的路径添加到CMAKE_MODULE_PATH变量中,这样CMake就能够找到包配置文件。 总之,出现这个错误信息通常是由于依赖库没有正确安装或配置不正确导致的。解决方法是从库的安装和配置层面入手,确保CMake能够正确找到依赖包的配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值