1

大家,早安,

我在为 C++ 制作 SWIG 接口时遇到了麻烦。我有几个 .cpp 和 .h 文件,我只想为其中几个文件创建一个接口(我将在我的 Java 代码中使用),因此我的 .i 文件如下所示:

/* File : AlgoritmoElectrico.i */
%module alg

/* Header files that are referred in the ones I want to create the interface with */
%{
#include "AlgoritmoElectrico.h"
#include "Proyecto.h"
#include "Indice.h"

/* ... I skipped a few to make it shorter ... */

#include "ParserTime.h"
%}

/* Header files of classes I want to use in Java */
%include "AlgoritmoElectrico.h"
%include "AlgoritmoElectrico.h"

所以我运行swig -c++ -java AlgoritmoElectrico.i并得到了几个 .java 文件,加上 .cxx 包装器,我编译了所有 .java 文件,javac *.java并使用本机和包装器代码创建了 .so 库。

我的 Java 代码如下所示:

package mr;

/* ... Stuff ... */

public class MRAlgoritmo {

    public static class Map extends Mapper<LongWritable, Text, IntWritable, Text> {
        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            // Obtiene instante y circulaciones
            Pattern pattern = Pattern.compile("\t[ ||| ]"); // FIXME revisar regex
            String[] info = pattern.split(value.toString());

            // Captura datos de proyecto
            System.loadLibrary("algoritmo");
            Proyecto proyecto = new Proyecto("Proyecto1");
            proyecto.ReadFile("infraestructura");
            proyecto.getParametros().setIntervalo(1);

            // Ejecuta algortimo con datos de circulaciones
            AlgoritmoElectrico algoritmo = new AlgoritmoElectrico(proyecto);
            String [] resultados = algoritmo.Ejecutar(info);

            /* ... stuff ... */
        }    
    } 



     public static void main(String[] args) throws Exception {
        /* ... stuff not related with the above, working with Hadoop MR ... */
     }

}

Proyecto并且AlgoritmoElectrico是 C++ 类,但没有找到它们。想法?

谢谢!!

4

1 回答 1

1

我发现了问题,这是一个包装错误。我强迫 swig 在 .java 文件中添加一个包语句,然后导入工作正常

我使用swig -c++ -java -package <package_name> <files>了,然后我编译并构建了保留包结构的 jar。之后我可以像往常一样参考它的内容,它工作得很好。

于 2013-10-01T09:53:23.003 回答