Не могу использовать шаблонное выражение dlib в SWIG - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь использовать мою библиотеку C ++ с dlib-кодом в проекте Java через SWIG.Для этого я использую этот шаблон .Я могу построить этот пример, используя run_test.sh скрипт в этом каталоге, и все работает нормально.Но если я изменю файлы в этом примере, я получу проблему.

swig_api.h:

#ifndef EXAMPLE_SWIG_ApI_H_ 
#define EXAMPLE_SWIG_ApI_H_

#include <dlib/java/java_array.h>
#ifdef SWIG
%include <dlib/java/java_array.h>
#endif
// ----------------------------------------------------------------------------------------

#endif // EXAMPLE_SWIG_ApI_H_

java_array.h:

#ifndef DLIB_SWIG_JAVA_ARRAY_H_
#define DLIB_SWIG_JAVA_ARRAY_H_

#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/dnn.h>
#include <dlib/data_io.h>
#include <dlib/timer.h>
#include <dlib/misc_api.h>

namespace java
{

template <template <int,template<typename>class,int,typename> class block, int N, template<typename>class BN, typename SUBNET>
using residual = dlib::add_prev1<block<N,BN,1,dlib::tag1<SUBNET>>>;

}

#endif // DLIB_SWIG_JAVA_ARRAY_H_

Вывод:

. / Run_test.sh mkdir: невозможно создать каталог 'build': файл существует - используется версия CMake: 3.5.1 - версия dlib для компиляции: 19.16.99 - C ++ 11 активирован.- Переменная окружения JAVA_HOME не установлена, пытаюсь угадать ее ... - Использование JAVA_HOME OF / usr / lib / jvm / java-8-openjdk-amd64 - C ++ 11 активирован.- Конфигурирование выполнено - Генерирование выполнено - Файлы сборки были записаны в: / home / user / Documents / dlib-master / dlib / java / build [97%] Встроенный целевой dlib [98%] Swig source / home / user/Documents/dlib-master/dlib/java/../../dlib/java/java_array.h:18: Ошибка: синтаксическая ошибка во входных данных (1).CMakeFiles / myproject.dir / build.make: 61: рецепт для цели 'lib / java_src / net / dlib / swigJAVA_wrap.cxx' не выполнен make [2]: * [lib / java_src / net / dlib / swigJAVA_wrap.cxx] Ошибка 1 CMakeFiles / Makefile2: 67: ошибка рецепта для цели «CMakeFiles / myproject.dir / all» [1]: * [CMakeFiles / myproject.dir / all] Ошибка 2 Файл сборки: 127: рецепт для цели »all 'fail make: *** [all] Ошибка 2

Но я могу получить dlib и построить эту функцию в java_array.h:

std::vector<dlib::matrix<dlib::rgb_pixel>> jitter_image(
    const dlib::matrix<dlib::rgb_pixel>& img
);

Я знаю, что The 'using' keyword in template aliasing is not fully supported yet в swig, так что, может быть, я должен как-то изменить template выражение, но что именно я должен делать?

Кроме того, using namespace dlib; происходит до Error: Nothing known about namespace 'dlib'.

Обратите вниманиечто я не хочу напрямую использовать этот код в Java.Я хочу использовать его в функции C ++, которую я буду использовать в Java через интерфейс void fun(char *input_string, double *output_param).

Итак, как я могу использовать этот код в Java с помощью SWIG?

...