我遵循了有关“ Swig and Java”文档的建议:


  我正在编译代码,并且正在使用模板。我提供了
  javapackage typemap,但是SWIG不会生成正确的JNI字段
  描述符。使用模板的重命名名称作为
  “ javapackage”类型图:
  
  %typemap(javapackage)std :: vector“ your.package.here”
  
  %template(VectorOfInt)std :: vector;


,但对我不起作用。

我有看起来像这样的接口文件:

%module moduleJava

%include "std_vector.i"
%include "std_wstring.i"

%typemap( javapackage )  std::vector < double >  "Package";
%typemap( javapackage )  std::vector < std::wstring > "Package";

// Instantiate templates used by example
%template(DoubleVector) std::vector < double > ;
%template(StringVector) std::vector < std::wstring > ;

%pragma( java ) jniclasspackage = "Package"

%include java_file1.i
%include java_file2.i


在包含的每个其他接口文件中,我都有其他命名空间中的对象,但所有对象都位于“ Package”命名空间中,如下所示:

//java_file1.i
%{
    #include "header.h"
%}

%nspace Package::OtherPackage::Class;

%include "header.h"


因此,每个类都可以到达正确的位置,创建文件夹并插入包指示...除了DoubleVector和StringVector-它们在全局范围内保持不变,并且jni签名与包不匹配。

%typemap( javapackage ) std::vector < double > "Package"是否有效?还是我在这里做错了什么?

谢谢

最佳答案

提供以下命令以将文件打包为特定的软件包。 SWIG不会创建目录,因此请确保它事先存在。

swig -java -package com.company.swig -outdir com/company/swig inteface.i

10-06 09:04