当前位置: 首页 > article >正文

如何解决Eigen和CUDA版本不匹配引起的错误math_functions.hpp: No such file or directory

Apollo9针对RTX40的docker环境里的Eigen库版本是3.3.4,CUDA是11.8:

编译我们自己封装模型的某些component代码时没问题,编译一个封装occ模型的component代码时始终报错:

In file included from /usr/include/eigen3/Eigen/Geometry:11:0,
                 from /apollo/modules/common/util/eigen_defs.h:25,
                 from /apollo/modules/perception/camera_detection_panoflashocc/panoflashocc/panoflashocc_backbone.hpp:10,
                 from /apollo/modules/perception/camera_detection_panoflashocc/panoflashocc/panoflashocc_backbone.cu:5:
/usr/include/eigen3/Eigen/Core:42:14: fatal error: math_functions.hpp: No such file or directory
     #include <math_functions.hpp>

按网上有人说的把usr/include/eigen3/Eigen/Core的42行改成cuda_runtime.h:

     //#include <math_functions.hpp>  
     #include <cuda_runtime.h>

后报新的错误:

/usr/local/cuda/targets/x86_64-linux/include/crt/common_functions.h:74:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                        ^
/usr/local/cuda/targets/x86_64-linux/include/crt/common_functions.h:74:24: note: in definition of macro '__CUDACC_VER__'
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."
                      

搜索eigen3的头文件里确实定义有__CUDACC_VER__之类的定义,但是cuda说不支持了,这很显然是eigen3.3.4版本低了,和cuda11.8不匹配,一种解决办法是按网上说的,删掉eigen3.3.4,去网上下载更新版本的eigen的源码(例如3.3.8或3.4)然后自己编译安装,但是考虑到部署需求,我们的环境不能随便动,最好能不动eigen就能解决这个问题。

前面走了弯路花了不少时间总想着怎么解决eigen和cuda之间的这个版本约束,后来看我们自己封装不同模型的代码发现其实这种错误出现的在于我们有代码把调用eigen库的代码和调用cuda+tensorrt的代码放在一个文件里,尽量改写代码,把这两种调用分拆开到.cpp和.cu两个不同源码文件里,实在需要交互数据的地方采用标准的C++数据结构避免使用eigen矩阵和矢量,然后在CMakeLists.txt里将两个文件放在不同的library里编译(.cu文件放在cuda_add_library()里,.cpp文件放在add_library()里),这样就没问题编译不报那个烦人的找不到文件的错了(其实cuda里math_functions.hpp文件是存在的,只是eigen版本低了)。


http://www.kler.cn/a/460951.html

相关文章:

  • 单片机串口控制
  • 机器学习经典算法——线性回归
  • 黑马Java面试教程_P10_设计模式
  • SpringMVC(一)配置
  • 2000-2020年各省财政一般预算支出面板数据
  • RC充电电路仿真与分析
  • 给弹出框中的某个div赋值
  • 不分页表格界面卡死问题,使用虚拟表格
  • Mixer做的材质导出到Bridge
  • [创业之路-229]:《华为闭环战略管理》-5-平衡记分卡与战略地图
  • 江苏省有一级科技查新机构吗?
  • 单元测试4.0+思路总结
  • STM32 SPI读取SD卡
  • SQL 实战:MySQL JSON 函数解析 – 处理非结构化数据
  • pytorch autograd模块介绍
  • 在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件
  • 头歌python通关:面向对象程序设计
  • 【机器学习】机器学习的基本分类-自监督学习(Self-supervised Learning)
  • Python自然语言处理利器:SnowNLP模块深度解析、安装指南与实战案例
  • Wend看源码-Java-Collections 工具集学习
  • Java 操作 PDF:从零开始创建功能丰富的PDF文档
  • 32.失焦提示 C#例子 WPF例子
  • 建造者设计模式学习
  • Go 语言中强大的配置管理库—Viper
  • 比较各种排序方法的实现思想、优缺点和适用场合
  • Property ‘webkit‘ does not exist on type ‘Window typeof globalThis‘.