标题修改在新鲜版本中不会生效
Header modifications do not take effect in fresh build
我试图在opencv 3.1中使用简短的描述符。为了实现该OPENCV,必须使用_contrib来构建OpenCV。因此,我没有错误编制了它,也可以在命令窗口内构建hive.cpp.o beeing。
所以当我尝试使用它时,我的Android应用程序崩溃
OPENCV错误:错误参数(不支持指定的描述符提取器类型。)在静态CV :: JavadescriptOrcriptoreXtractor* cv :: Javadesscriptorextractor :: create(int),file/home/maksim/workspace/workspace/android-pack/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/模块/功能2D/MISC/Java/src/cpp/features2d_manual.hpp,行374
所以我检查了功能2D_Manual.hpp。第374行是开关情况块的默认表达式:
CV_WRAP static javaDescriptorExtractor* create( int extractorType )
{
//String name;
if (extractorType > OPPONENTEXTRACTOR)
{
//name = "Opponent";
extractorType -= OPPONENTEXTRACTOR;
}
Ptr<DescriptorExtractor> de;
switch(extractorType)
{
//case SIFT:
// name = name + "SIFT";
// break;
//case SURF:
// name = name + "SURF";
// break;
case ORB:
de = ORB::create();
break;
//case BRIEF:
// name = name + "BRIEF";
// break;
case BRISK:
de = BRISK::create();
break;
//case FREAK:
// name = name + "FREAK";
// break;
case AKAZE:
de = AKAZE::create();
break;
default: //**this is line 374**
CV_Error( Error::StsBadArg, "Specified descriptor extractor type is not supported." );
break;
}
return new javaDescriptorExtractor(de);
因此,出现了错误,因为案件摘要已评论。所以我像这样修改了:
#include "opencv2/xfeatures2d.hpp"
。。。
case BRIEF:
de = xfeatures2d::BriefDescriptorExtractor::create();
break;
。。。
default:
CV_Error( Error::StsBadArg, "---TEST--- Specified descriptor extractor type is not supported." );
break;
}
在新的目录中重建并使用新构建后,完全相同的错误是持续存在的。消息都没有包含" ---测试---"。
所以我想知道为什么我的更改没有任何效果。
我也想知道为什么文件路径是:
/home/maksim/workspace/android-pack/opencv/modules/features2d/misc/java/src/src/cpp/features2d_manual.hpp
这个杂物甚至在我的系统上甚至都不存在,并谷歌搜索显示,/home/maksim/是Android上许多不同错误消息的一部分。
构建前的实际路径是:
c: user jjg-cd desktop build_workspace opencv-3.1.0 modules modules features2d misc java java src src cpp cpp features2d_manual.hpp
我希望有人可以向我解释问题是什么,并最终给我一个提示如何解决问题。
您看到的错误几乎可以肯定来自您链接到使用相同标头文件的库。当您重新编译已更改标头的代码时,该标头更改仅对您实际编译的代码生效,而不是您还链接的库中已编译的代码。
查看您的编译线,并将所有-l
选项视为可能的嫌疑犯。
这也解释了不存在的目录参考:此目录存在并在库本身(ies)本身被编译到所编译的任何机器上时使用。
如果您希望将标题更改在库代码中生效,则需要重新编译库本身。看看您的项目配置文件:您很可能已经有make
或cmake
选项可以执行此操作。
我已经放弃了,但偶然找到了解决方案。我自己构建的库未使用的原因是这些库通常由OpenCV Manager应用程序提供。为了摆脱OpenCV管理器并使用自己的库,我只需要静态地初始化OpenCV。
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error}
}
可以在此处找到更多详细信息
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 独立读取-修改-写入顺序
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 在官方 ZeroMQ 多线程示例的修改版本中崩溃
- 是否有范围::视图::转换的可修改视图版本
- ImageMagick C 版本7在空白图像中修改像素值
- 标题修改在新鲜版本中不会生效
- 是否可以有一个零成本assert(),这样代码就不必在调试和发布版本之间进行修改
- 修改的SSE版本
- 将字符串中的字符替换为其修改后的版本
- 修改gcc/g++版本会导致段故障
- 有没有办法在不修改新版本的情况下(暂时)恢复旧的G++3.2版本
- visual NANT为C++项目修改程序集版本