2016-11-14 69 views
1

我產生一個Python綁定到C++項目,SWIG和C進行以下文件:SWIG Python綁定似乎空

test.h

int add(int a, int b); 

TEST.CPP

int add(int a, int b) 
{ 
     return a+b; 
} 

test.i

%module test 
%{ 
#include "test.h" 
%} 

的CMakeLists.txt

cmake_minimum_required(VERSION 2.6) 
project(swig-test) 

# This is a CMake example for Python 

add_library(testcpp SHARED test.cpp) 

FIND_PACKAGE(SWIG REQUIRED) 
INCLUDE(${SWIG_USE_FILE}) 

FIND_PACKAGE(PythonLibs) 
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) 

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) 

SET(CMAKE_SWIG_FLAGS "") 

SET_SOURCE_FILES_PROPERTIES(test.i PROPERTIES CPLUSPLUS ON) 
SET_SOURCE_FILES_PROPERTIES(test.i PROPERTIES SWIG_FLAGS "-includeall") 
set(${CMAKE_CXX_FLAGS} "${CMAKE_CXX_FLAGS} -fPIC") 
SWIG_ADD_MODULE(test python test.i) 
SWIG_LINK_LIBRARIES(test testcpp) 

它成功地編譯和libtestcpp.so_test.sotest.py創建。 strings libtestcpp.sostrings _test.so都有一個條目_Z3addiiimport test在Python中工作,但在Python中的test名稱空間中沒有任何內容。

我也試過手動

swig -c++ -python test.i 
g++ -c -fpic test.cpp test_wrap.cxx -I/usr/include/python2.7 -I. 
g++ -shared test.o test_wrap.o -o _test.so 

具有相同的結果編制。

注意import test不是完全可能是有用的空模塊; import test; dir(test)產量

['__builtin__', 
'__builtins__', 
'__doc__', 
'__file__', 
'__name__', 
'__package__', 
'_newclass', 
'_object', 
'_swig_getattr', 
'_swig_property', 
'_swig_repr', 
'_swig_setattr', 
'_swig_setattr_nondynamic', 
'_test'] 

import test; help(test)具有它是由SWIG創建的描述。

+2

添加一行%include "test.h"我覺得你還是需要在'測試的末尾添加一行'%包括「test.h」'。 i'。 –

+0

這確實是對的 - 我似乎完全忽略了這一點! – danielunderwood

+0

我在評論之前並不是100%確定的。我將我的評論轉換爲答案。 –

回答

2

您需要在年底test.i

%module test 
%{ 
#include "test.h" 
%} 

%include "test.h"