ORBSLAM和Nerf结合的环境冲突解决

大部分是CUDA11.1和Eigen环境的冲突

错误一:未找到 math_functions.hpp

原本的cuda/include里面没有这个hpp文件,然后我在cuda11.1文件夹里面找到了

方法一

创建一个符号链接来cuda/include/math_functions.hpp修复cuda/include/crt/math_functions.hpp该问题:

ln -s /usr/local/cuda_11.1/include/crt/math_functions.hpp /usr/local/cuda/include/math_functions.hpp

哦,对不要忘了给文件夹的cmakelist.txt的文件里加上这两句

find_package(CUDA REQUIRED)

include_directories(/usr/local/cuda/include)

这个加是得递归地去加,比如我在
Multi-Object-NeRF文件夹中搞build.sh里面含子目录的make,和当前目录的make,需要把子目录的make加上这些语句。

比如我加了个core子文件夹的make,我就需要在如下文件夹的cmakelist里面加东西
/Multi-Object-NeRF/Core

方法二

"
find_package(CUDA REQUIRED)

include_directories(/usr/local/cuda-11.1/targets/x86_64-linux/include)
include_directories(/usr/local/cuda-11.1/targets/x86_64-linux/include/crt)
"
Cmakelist直接加这个

错误二: no suitable constructor exists to convert from “float” to “Eigen::half

/usr/local/include/eigen3/Eigen/src/Core/arch/CUDA/Half.h(612): error: no suitable constructor exists to convert from “float” to “Eigen::half”

对应代码直接全注掉。

// device EIGEN_STRONG_INLINE Eigen::half __shfl_xor(Eigen::half var, int laneMask, int width=warpSize) {
// return static_castEigen::half(__shfl_xor(static_cast(var), laneMask, width));
//}

错误三:Eigen::half’ has no member named ‘x’

报了一堆没定义之类的错误。看了一下全是eigen,cuda目录下的。直觉的话感觉是eigen版本的问题。
于是卸了原来包管理器安装的最新版本eigen3.3.7
sudo apt-get remove libeigen3-dev

在Eigen官网下载了3.4.0,解压并替换原来/usr/local/include/eigen3的所有内容。

解决了。

错误四:

nerf_model.cu(1988): error: namespace “cv” has no member “imwrite”

#include<opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui_c.h>
加上这两个库即可

加上后发现还有一个文件疯狂报错

Multi-Object-NeRF/Core/src/nerf_data.cu(177): error: namespace “cv” has no member “IMREAD_UNCHANGED”

Multi-Object-NeRF/Core/src/nerf_data.cu(194): error: namespace “cv” has no member “imread”

Multi-Object-NeRF/Core/src/nerf_data.cu(194): error: namespace “cv” has no member “IMREAD_UNCHANGED”

代码片段中包含的头文件“opencv2/imgproc/imgproc_c.h”和“opencv2/highgui/highgui_c.h”是 OpenCV 旧 C 接口的一部分,并且不声明“imread”函数。 该函数是 C++ 接口的一部分。

要修复该错误,您应该包含包含“imread”定义的相应 C++ 头文件。 如果您使用 OpenCV 4.x 或更高版本,则应包括:

  • opencv2/opencv.hpp,这是包含 OpenCV 所有模块的主包含文件,或者
  • opencv2/imgcodecs.hpp,这是包含图像编解码器的特定模块(包括imread)。
    所以将这个文件的头文件换成opencv2/opencv.hpp,opencv2/imgcodecs.hpp即可

错误五:

error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope
66 | im = cv::imread(strDataset+“/”+vstrImageFilenames[ni],CV_LOAD_IMAGE_UNCHANGED);
CV_LOAD_IMAGE_UNCHANGED换成cv::IMREAD_UNCHANGED

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值