无法在SWIG中使用dlib的模板表达式

时间:2018-12-14 05:51:53

标签: java c++ swig dlib

我尝试通过SWIG在Java项目中将我的C ++库与dlib代码一起使用。为此,我使用this template。我可以在此目录中使用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来源   /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 Makefile:127:目标配方   “全部”失败:*** [全部]错误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有点痛,所以也许我应该以某种方式更改template的表达方式,但是我该怎么办?

此外,using namespace dlib;出现在Error: Nothing known about namespace 'dlib'上。

请注意,我不想直接在Java中使用此代码。我想在C ++函数中使用它,该函数将通过void fun(char *input_string, double *output_param)接口在Java中使用。

那么,如何使用SWIG在Java中使用此代码?

0 个答案:

没有答案