Python绑定似乎是空的

SWIG Python binding seems empty

本文关键字:似乎是 绑定 Python      更新时间:2023-10-16

我有以下文件,用于使用SWIG和CMake生成Python绑定到c++项目:

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.pystrings 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创建的

您需要在test.i的末尾添加一行%include "test.h"

%module test
%{
#include "test.h"
%}
%include "test.h"
相关文章: