Я пытаюсь использовать мою библиотеку 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?