2016-12-25 88 views
0

語境

做一個C包裝爲Python我有在C,我想在Python環境來測試實現的功能。讀了一些之後,我決定使用SWIG工具。剛做了一個簡單的例子here,但我仍然懷疑,所以我決定來這裏。的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 */ 

問題

I)我想知道我究竟應該定義痛飲模塊.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工作,使用克++編譯器和蟒vesion 2.7.6。

我真的很感激任何幫助或提示(這個問題對我來說有點困難,因爲我是一個機械工程師,對機器人有着愚蠢的想法:))。

回答

0

使用gcc(而不是g++)。 也使用swig -python ransac_2Dline.i(但沒有-c++選項)