Как правильно вызвать библиотечную функцию C ++ в Java Activity - PullRequest
0 голосов
/ 04 февраля 2019

Я использую библиотеку GitHub in-paint https://github.com/cheind/inpaint в андроид-студии и пытаюсь вызвать jni-функцию inpainter в основной деятельности, но она не разрешается или не распознается.C ++ является новым для меня, поэтому у меня возникла проблема.

в файле criminisi_inpainter.cpp

есть эта функция

  void inpaintCriminisi(
    cv::InputArray image,
    cv::InputArray targetMask,
    cv::InputArray sourceMask,
    int patchSize)
{
    CriminisiInpainter ci;
    ci.setSourceImage(image.getMat());
    ci.setSourceMask(sourceMask.getMat());
    ci.setTargetMask(targetMask.getMat());
    ci.setPatchSize(patchSize);

    ci.initialize();

    while (ci.hasMoreSteps()) {
        ci.step();
    }

    ci.image().copyTo(image.getMat());
}

эта нативная функция, которую я должен вызвать в mainактивность

общедоступный родной void inpaintCriminisi (?,?,?, int z);

Проблема в том, что я не понимаю, какие параметры будут предоставлены здесь в основной активности (JAVA)

В nativelib.cpp я экспортирую функцию jnicall, я даю параметры объекта, которые не являются точными параметрами, которые должны быть определены.

  extern "C"
JNIEXPORT void JNICALL
Java_com_example_raweeda_applicationc_MainActivity_inpaintCriminisi(JNIEnv *env, jobject instance,
                                                                   jobject a, jobject b, jobject c,
                                                                    jint xl) {

    // TODO
    inpaintCriminisi(x,y,z,xl);

parameters are not object it just an example

}

это ошибка, которую я получаю

Build command failed.
Error while executing process C:\Users\abc\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\2019_android\ApplicationC\app\.externalNativeBuild\cmake\debug\x86 --target native-lib}
[1/3] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/3] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/criminisi_inpainter.cpp.o
FAILED: C:\Users\abc\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=i686-none-linux-android19 --gcc-toolchain=C:/Users/abc/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64  -Dnative_lib_EXPORTS -ID:/opencv-sdk/OpenCV-android-sdk/sdk/native/jni/include --sysroot C:/Users/abc/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -fno-addrsig -Wa,--noexecstack -Wformat -Werror=format-security -stdlib=libc++ -std=c++11 -frtti -fexceptions -O0 -fno-limit-debug-info  -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -MF CMakeFiles\native-lib.dir\src\main\cpp\native-lib.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -c D:\2019_android\ApplicationC\app\src\main\cpp\native-lib.cpp
D:\2019_android\ApplicationC\app\src\main\cpp\native-lib.cpp:13:5: warning: declaration does not declare anything [-Wmissing-declarations]

    cv::InputArray ;

    ^~~~~~~~~~~~~~

D:\2019_android\ApplicationC\app\src\main\cpp\native-lib.cpp:23:39: error: expected '(' for function-style cast or type construction

     inpaintCriminisi( cv::InputArray image,

                       ~~~~~~~~~~~~~~ ^

D:\2019_android\ApplicationC\app\src\main\cpp\native-lib.cpp:24:28: error: expected '(' for function-style cast or type construction

            cv::InputArray targetMask,

            ~~~~~~~~~~~~~~ ^

D:\2019_android\ApplicationC\app\src\main\cpp\native-lib.cpp:25:28: error: expected '(' for function-style cast or type construction

            cv::InputArray sourceMask,

            ~~~~~~~~~~~~~~ ^

D:\2019_android\ApplicationC\app\src\main\cpp\native-lib.cpp:26:17: error: expected '(' for function-style cast or type construction

            int patchSize);

            ~~~ ^

1 warning and 4 errors generated.

FAILED: C:\Users\abc\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=i686-none-linux-android19 --gcc-toolchain=C:/Users/abc/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64  -Dnative_lib_EXPORTS -ID:/opencv-sdk/OpenCV-android-sdk/sdk/native/jni/include --sysroot C:/Users/abc/AppData/Local/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -fno-addrsig -Wa,--noexecstack -Wformat -Werror=format-security -stdlib=libc++ -std=c++11 -frtti -fexceptions -O0 -fno-limit-debug-info  -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/criminisi_inpainter.cpp.o -MF CMakeFiles\native-lib.dir\src\main\cpp\criminisi_inpainter.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/criminisi_inpainter.cpp.o -c D:\2019_android\ApplicationC\app\src\main\cpp\criminisi_inpainter.cpp
In file included from D:\2019_android\ApplicationC\app\src\main\cpp\criminisi_inpainter.cpp:7:

D:\2019_android\ApplicationC\app\src\main\cpp/timer.h:83:1: error: extraneous closing brace ('}')

}

^

D:\2019_android\ApplicationC\app\src\main\cpp\criminisi_inpainter.cpp:10:10: fatal error: 'opencv' file not found

#include "opencv"

         ^~~~~~~~

2 errors generated.

ninja: build stopped: subcommand failed.

потому что в nativelib.cpp error

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...