LeGO-LOAM-ROS2 编译gtsam时报错未找到tbb和mkl库
-
我在研究三维建图时看见小鱼发布的LeGO-LOAM-ROS2,于是打算跟着小鱼的教程来,但在执行编译步骤cmake ..时报错!
但我自己也安装了tbb和mkl的库 而后我忽略这两个警告,执行下一步sudo make install 时爆出一大堆错误在进度达到38%时直接结束。 希望大佬可以看看是什么原因? -
在编译LeGO-LOAM-ROS2时遇到关于TBB(Threading Building Blocks)和MKL(Math Kernel Library)的库找不到的问题,通常是因为这些库没有正确安装或者安装后没有被系统正确识别。TBB和MKL是Intel提供的库,TBB用于并行编程,MKL用于数学计算优化,两者都是gtsam库可能依赖的组件。
以下是一些可能的解决步骤:
1. 确认TBB和MKL是否安装
首先,确保TBB和MKL已经正确安装在你的系统上。对于Ubuntu系统,你可以使用以下命令来检查这些库:
dpkg -l | grep tbb dpkg -l | grep intel-mkl
如果这些命令没有返回任何已安装的包,你需要安装它们。
2. 安装TBB
TBB可以通过Ubuntu的包管理器安装:
sudo apt-get update sudo apt-get install libtbb-dev
3. 安装MKL
MKL的安装稍微复杂一些,因为Intel通常提供的是一个复杂的安装包,你可能需要从Intel的官方网站下载MKL的安装包,并按照指示进行安装。确保你选择了适合你的操作系统和架构的版本。安装后,你可能需要设置环境变量来确保系统可以找到MKL库。例如,你可能需要添加MKL的库路径到你的
LD_LIBRARY_PATH
环境变量中:export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH export MKLROOT=/opt/intel/mkl
这里的路径
/opt/intel/mkl
可能需要根据你的实际安装位置进行调整。4. 配置CMake
在编译gtsam之前,确保CMake可以找到TBB和MKL。你可以通过在CMakeLists.txt中设置相关变量来指定这些库的路径,或者通过命令行参数传递给CMake:
cmake -DTBB_ROOT=/path/to/tbb .. cmake -DMKL_ROOT=/path/to/mkl ..
同样,这里的路径需要根据你的实际安装位置进行调整。
5. 清理并重新编译
在修改CMake配置后,确保先清理旧的构建文件,然后重新运行CMake和make:
make clean cmake .. make -j$(nproc) sudo make install
6. 检查编译错误
如果在编译过程中遇到错误,仔细阅读错误信息,看看是否有关于缺失文件或库的错误。这可能会帮助你定位问题。
7. 寻求帮助
如果以上步骤仍然无法解决问题,你可以在ROS社区、GitHub仓库或者相关的技术论坛上寻求帮助,提供尽可能详细的信息,如错误日志、系统信息、CMakeLists.txt的相关部分等。
希望这些步骤能帮助你解决问题!
以上为生成回答,仅供参考~
-
@小伊 TBB库我已经是安装了,用dpkg -l | grep tbb
查找也有了 ,但是他为什么还是找不到 -
当你使用
dpkg -l | grep tbb
能够找到 TBB(Threading Building Blocks)库的安装记录,但在编译或运行时系统报告找不到该库,这通常意味着库的安装路径没有被正确地添加到系统的库搜索路径中,或者相关的头文件路径没有被添加到编译器的包含路径中。以下是一些可能的解决步骤:-
确认安装路径:
首先确认 TBB 库的实际安装位置。通常,使用dpkg -L libtbb-dev
(或你的TBB库的具体包名)可以查看该包安装的所有文件。这可以帮助你确认头文件和库文件的实际位置。 -
设置库搜索路径:
- 如果你在编译时遇到链接问题(例如,
ld: cannot find -ltbb
),确保在编译命令中使用了-L
选项来指定库文件的路径。例如:g++ your_code.cpp -o your_program -L/path/to/tbb/lib -ltbb
- 你还可以设置环境变量
LD_LIBRARY_PATH
来包含 TBB 库的路径,以便在运行时找到它:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/tbb/lib
- 如果你在编译时遇到链接问题(例如,
-
设置头文件搜索路径:
- 如果在编译时遇到找不到头文件的错误(例如,
#include <tbb/tbb.h>
找不到),确保在编译命令中使用了-I
选项来指定头文件的路径。例如:g++ your_code.cpp -o your_program -I/path/to/tbb/include
- 如果在编译时遇到找不到头文件的错误(例如,
-
更新链接器缓存:
- 如果你已经添加了库到新的路径,并且希望系统能够自动找到它,可以运行
sudo ldconfig
来更新链接器的缓存。这通常在你手动安装库到非标准位置时有用。
- 如果你已经添加了库到新的路径,并且希望系统能够自动找到它,可以运行
-
检查包管理器:
- 确保你安装了正确的开发包(通常是带有
-dev
后缀的包),这个包应该包含头文件和库文件。
- 确保你安装了正确的开发包(通常是带有
-
重新启动或重新登录:
- 如果你更改了环境变量(如
LD_LIBRARY_PATH
),可能需要重新启动终端或重新登录以应用这些更改。
- 如果你更改了环境变量(如
-
检查依赖关系:
- 使用
dpkg -s libtbb-dev
(或相应的包名)来检查包的详细信息,包括它可能依赖的其他包。
- 使用
通过以上步骤,你应该能够解决找不到 TBB 库的问题。如果问题依旧存在,可能需要检查更具体的系统配置或寻求社区的帮助。
以上为生成回答,仅供参考~
-
-
@小伊 在 LeGO-LOAM-ROS2 编译gtsam时报错未找到tbb和mkl库 中说:
库的安装路径没有被正确地添加到系统的库搜索路径中,库的安装路径如何查找,后续如何添加到系统的库搜索路径中,是在.bashrc中吗?
-
在编译或运行依赖于特定库(如TBB和MKL)的程序时,如果系统找不到这些库,通常是因为这些库的安装路径没有被添加到系统的库搜索路径中。以下是如何查找这些库的安装路径,并将它们添加到系统的库搜索路径中的步骤。
查找库的安装路径
-
使用
find
命令:
如果你不确定库文件安装在哪里,可以使用find
命令在文件系统中搜索。例如,对于TBB库,你可以尝试:sudo find / -name "libtbb*"
这将搜索所有包含
libtbb
的文件。对于MKL,你可以尝试搜索libmkl
或libiomp
等。 -
使用
locate
命令(如果已安装):
locate
命令比find
更快,因为它使用了一个预先构建的数据库。首先,你可能需要更新数据库:sudo updatedb
然后搜索库:
locate libtbb locate libmkl
-
查看安装日志或文档:
如果你是从源代码安装或从包管理器(如apt, yum等)安装的,安装日志或官方文档通常会告诉你库的安装位置。
添加库到系统的库搜索路径
在Linux系统中,库搜索路径通常通过以下方式管理:
-
修改
LD_LIBRARY_PATH
环境变量:
你可以在你的.bashrc
或.bash_profile
文件中添加库的路径到LD_LIBRARY_PATH
。例如:export LD_LIBRARY_PATH=/path/to/tbb/lib:/path/to/mkl/lib:$LD_LIBRARY_PATH
然后,运行
source ~/.bashrc
或重新登录你的会话以使更改生效。 -
修改
/etc/ld.so.conf
或添加.conf
文件到/etc/ld.so.conf.d/
:
这是一个更全局的方法,适用于所有用户。你可以将库的路径添加到/etc/ld.so.conf
文件的末尾,或者在该目录下创建一个新的.conf
文件,如tbb.conf
,并在其中添加库的路径。然后,运行sudo ldconfig
来更新链接器缓存。 -
在编译时指定库路径:
如果你是在编译时遇到链接问题,你可以在编译命令中直接指定库的路径。例如,使用g++
时:g++ your_program.cpp -L/path/to/tbb/lib -L/path/to/mkl/lib -ltbb -lmkl_core -o your_program
注意事项
- 确保你添加的是包含
.so
文件的目录,而不是.so
文件本身。 - 如果你使用的是ROS2,并且是在一个Docker容器或特定的环境中工作,你可能需要确保这些环境变量或配置在相应的环境中也被设置。
- 对于MKL,可能还需要设置其他环境变量,如
MKL_NUM_THREADS
,以及确保相关的运行时库(如Intel OpenMP)也被正确安装和配置。
通过上述步骤,你应该能够解决在编译gtsam时遇到的TBB和MKL库找不到的问题。
以上为生成回答,仅供参考~
-