我尝试通过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中使用此代码?