Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于如何使用SWIG为python编写c包装器的疑问 上下文_Python_C_Swig_Python C Api - Fatal编程技术网

关于如何使用SWIG为python编写c包装器的疑问 上下文

关于如何使用SWIG为python编写c包装器的疑问 上下文,python,c,swig,python-c-api,Python,C,Swig,Python C Api,我有一个用c实现的函数,我想在python环境中测试它。读了几遍之后,我决定使用SWIG工具。A刚才做了一个简单的例子,但我仍然有很多疑问,所以我决定来这里。c项目有以下文件 ransac2Dline.h ransac2Dline.c svd.h svd.c 我想用的功能是 int ransac_2Dline(float **data, int n, int maxT, float threshold, float *bestModel, int *b

我有一个用c实现的函数,我想在python环境中测试它。读了几遍之后,我决定使用SWIG工具。A刚才做了一个简单的例子,但我仍然有很多疑问,所以我决定来这里。c项目有以下文件

  • ransac2Dline.h
  • ransac2Dline.c
  • svd.h
  • svd.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 */
。是这样吗?或者我应该做些不同的事情

ii)ransac_2Dline函数计算的最重要的数据它不是由它返回的(返回的int值只是函数成功完成其任务的一个指标),而是通过点*bestModel在外部范围内变为可用。SWIG可以通过这种方法创建一个在python环境中模拟的接口吗

iii)这种方法是一种好的解决方案,还是应该使用ctypes或其他方法

更多信息 我正在使用Ubuntu14.04.5LTS,使用g++编译器和PythonVesion2.7.6

我将非常感谢任何帮助或提示(这个主题对我来说有点难,因为我是一个机械工程师,有一个与机器人一起工作的愚蠢想法:)

使用
gcc
(而不是
g++
)。 还可以使用
swig-python ransac2dline.i
(但不使用
-c++
选项)

/* 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);