标题修改不会在新构建中生效

时间:2016-06-22 09:46:25

标签: java android c++ opencv

我正在尝试在OpenCV 3.1中使用Brief描述符用于andoid。为了实现OpenCV必须使用_contrib从源代码构建。所以我编译它没有错误,也可以看到在命令窗口中构建的BRIEF.cpp.o beeing。

因此,当我尝试使用它时,我的Android应用程序崩溃了

  

OpenCV错误:静态cv :: javaDescriptorExtractor * cv :: javaDescriptorExtractor :: create(int),file / home / maksim / workspace / android-pack / opencv /中的错误参数(不支持指定的描述符提取器类型。) modules / features2d / misc / java / src / cpp / features2d_manual.hpp,第374行

所以我检查了features2d_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);

所以错误显然出现了,因为案例Brief被评论了。所以我修改了它:

#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;
        }

在新目录中重建并使用新版本后,完全相同的错误是持久的。甚至没有&#34; --- TEST ---&#34;包含在消息中。

所以我想知道为什么我的改变没有任何效果。

我也想知道为什么文件路径是:

  

/home/maksim/workspace/android-pack/opencv/modules/features2d/misc/java/src/cpp/features2d_manual.hpp

这个dirctory甚至不存在于我的系统上并且谷歌搜索显示,/ home / maksim /是android上许多不同错误消息的一部分。

构建前的实际路径是:

  

C:\用户\ JJG-CD \桌面\ Build_Workspace \的OpenCV-3.1.0 \模块\ features2d \杂项\ java中\ SRC \ CPP \ features2d_manual.hpp

我希望有人可以向我解释问题是什么,并最终给我一个如何解决问题的提示。

2 个答案:

答案 0 :(得分:0)

您看到的错误几乎肯定来自您链接到使用相同头文件的库。当您重新编译已更改标头的代码时,该标头更改仅对您实际编译的代码生效,而不是您已链接的库中已编译的代码。

查看您的编译行并将所有-l选项视为可能的嫌疑人。

这也解释了不存在的目录引用:这个目录存在并且是在编译它们的任何机器上编译库本身时使用的。

如果希望标题更改在库代码中生效,则需要重新编译库本身。看看您的项目配置文件:您可能已经有makecmake个选项来执行此操作。

答案 1 :(得分:0)

我已经放弃但是偶然找到了解决方案。我自己构建的库没有被使用的原因是这些库通常由opencv管理器应用程序提供。要摆脱OpenCV管理器并使用我自己的库,我只需要静态初始化OpenCV。

static {
if (!OpenCVLoader.initDebug()) {
    // Handle initialization error}
}

可以找到更多详细信息here