一、声明与致谢
1.1 问题概述(省时间看这)
在编译的时候如指令该指令python setup.py build_ext --inplace(举例子),之后报错错误:‘AT_CHECK’ was not declared in this scope; did you mean ‘DCHECK’?改怎么办?
去src文件夹里打开所有.cpp,在最前面添加:
#ifndef AT_CHECK
#define AT_CHECK TORCH_CHECK
#endif
1.2 致谢
对@hailanyi和@laizi_laizib两位博主表达感谢,本博文方法来自于二位博主,我只是做一个整理。
二、我的废话分析版
我是参考另一个博主的内容整理而成:error: ‘AT_CHECK’ was not declared in this scope解决方法-优快云博客
大概是说,前面的方法已经被弃用了,要用后面的方法了,不过对于我这种菜鸟,找了半天博主说的位置才找到,甚至不知道改哪,所以为了帮助新手,我整理了一份更详细的教程
举例,我编译的是DBNet中需要用到的一个cpp文件产出的错误,在执行这个指令的时候
python setup.py build_ext --inplace
大家的情况可能不是因为DBNet,如果不是该方法应该也有帮助。执行在一堆信息中找到了报错信息:
错误:‘AT_CHECK’ was not declared in this scope; did you mean ‘DCHECK’?
意思是就是 AT_CHECK被弃用了,需要用TORCH_CHECK方法,但是不知道要改什么文件,既然是编译,那应该是c/c++了,我只熟悉python,这些都是猜的,不过好在最后找到了(方法是所有文件都打开看看)
需要改的文件路径在:
文件路径在你需要编译的文件夹下的名为src的目录中,比如我的就是/DB/assets/ops/dcn/src
之后你会发现有.cpp文件,我的是这样的,有两个,大家的可能不一样
打开两.cpp的文件,之后分别在文件的最上面添加下面的代码,(这个方法来自于@laizi_laizib博主,他把方法写在了最上面提到的链接里的评论区,我整理了出来)之后保存即可成功编译。
#ifndef AT_CHECK
#define AT_CHECK TORCH_CHECK
#endif