我在c中实现了一个我想在python环境中测试的函数。经过一些阅读,我决定使用SWIG工具。刚刚做了一个简单的例子here,但我仍然怀疑,所以我决定来这里。 c项目包含以下文件
我想要使用的功能是
int ransac_2Dline(float **data, int n, int maxT, float threshold,
float *bestModel, int *bestInliers, int verbose);
在头文件ransac2Dline.h中用其他辅助函数声明。标题内容是
#ifndef RANSAC2DLINE_H
#define RANSAC2DLINE_H
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "svd.hpp"
int ransac_2Dline(float **data, int n, int maxT, float threshold,
float *bestModel, int *bestInliers, int verbose);
int randomSelect(float **sel, int nsel, float **data, int *ndata);
int fitModel_line(float *point, float *l, float threshold);
void estimateModel_line(float *l, float **P, int n);
void twoPointsLine(float *l, float **P);
#endif /* RANSAC2DLINE_H */
。
i)我想知道我应该如何定义SWIG模块.i。由于我想要一个仅用于 ransac_2Dline 功能的接口,我想SWIG模块需要处理它。我的意思是像这样的东西
/* File: ransac.i */
%module ransac
%{
#define SWIG_FILE_WITH_INIT
#include "ransac2Dline.h"
%}
int ransac_2Dline(float **data, int n, int maxT, float threshold,
float *bestModel, int *bestInliers, int verbose);
。这是正确的吗?或者我应该做些不同的事情?
ii) ransac_2Dline 函数计算的导入数据最多,它不会被返回(返回的int值只是函数成功完成的一个指标)任务)但它在外部范围内由点 * bestModel 转为可用。可以通过SWIG创建接口来在python环境中模拟这种方法吗?
iii)这种方法是一个很好的解决方案,还是应该使用ctypes或其他任何方法?
我正在使用Ubuntu 14.04.5 LTS,使用g ++编译器和python vesion 2.7.6。
我将非常感谢任何帮助或提示(这个主题对我来说有点困难,因为我是一名机械工程师,对机器人工作有愚蠢的想法。:))。
答案 0 :(得分:0)
使用gcc
(而不是g++
)。
也可以使用swig -python ransac_2Dline.i
(但不使用-c++
选项)