我有以下文件用于使用SWIG和CMake生成与C ++项目的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.so
和test.py
。 strings libtestcpp.so
和strings _test.so
都有一个条目_Z3addii
和import 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创建的。
答案 0 :(得分:2)
您需要在test.i
的末尾添加一行%include "test.h"
%module test
%{
#include "test.h"
%}
%include "test.h"