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

如何解决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.lryc.cn/news/512941.html

相关文章:

  • Mybatis 01
  • 前端页面展示本电脑的摄像头,并使用js获取摄像头列表
  • HTML5实现喜庆的新年快乐网页源码
  • Excel文件恢复教程:快速找回丢失数据!
  • 计算机网络-L2TP Over IPSec基础实验
  • 一个最简单的ios程序(object_c)的编写
  • 使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
  • 《QDebug 2024年12月》
  • 3---杭州工作三年半
  • 从2024看2025前端发展趋势
  • 网络渗透测试实验三:SQL注入
  • ElasticSearch7.8快速入门
  • 【YashanDB知识库】hive初始化崖山报错YAS-04209
  • 2024年度总结:保持正念 延迟满足
  • VScode SSH 错误:Got bad result from install script 解決
  • Logo设计免费生成器工具:轻松创建独特标志
  • [算法] [leetcode-349] 两个数组的交集
  • Type c系列接口驱动电路·内置供电驱动电路使用USB2.0驱动电路!!!
  • 第7章 程序流程控制 - 条件分支
  • Edge如何获得纯净的启动界面
  • gitlab的搭建及使用
  • 如何逐步操作vCenter修改DNS服务器?
  • XIAO ESP32 S3网络摄像头——2视频获取
  • 使用JMeter对Linux生产服务器进行压力测试
  • spring boot 异步线程池的使用
  • 风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注
  • 深入浅出梯度下降与反向传播
  • 【电机控制】基于STC8H1K28的六步换向——方波驱动(硬件篇)
  • 手搓一个ChatUI需要分几步
  • 2024年年度总结