Python绑定似乎是空的
SWIG Python binding seems empty
我有以下文件,用于使用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.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创建的
您需要在test.i的末尾添加一行%include "test.h"
%module test
%{
#include "test.h"
%}
%include "test.h"
相关文章:
- 无法将运行时类绑定到 XAML T 必须是 WinRT 类型
- Boost 绑定和"result_type":不是成员,对 c++03 友好
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 将引用绑定到指针的语法是什么?(各种)
- 为什么基于范围的 for 循环中的结构化绑定只是一个副本而不是引用?
- 您自己的类型的结构化绑定,不是结构或元组(通过公共成员函数)
- 结构化绑定的用例是什么?
- 使用 pybind11 绑定 typedef 类型的正确语法是什么?
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 结构化绑定:当某些内容看起来像引用并且行为类似于引用,但它不是引用时
- 客户端套接字是可绑定的,但不可连接,因为已在使用中
- 是由BOOST ::返回的函子,仅使用绑定的参数绑定,等效于不采用参数的函数
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 为什么我的运算符=(T&&)模板只绑定到一个const&而不是一个&&?
- 使用带有增强兽的 lambda 而不是绑定
- 我应该始终使用"T&&"而不是"const T&"或"T&"来绑定到回调函数吗?
- C++ 方法调用 (lvalue) 绑定到派生类中的函数 (rvalue),而不是基类中的函数 (lvalue)
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 为什么 T& 类型的模板函数参数可以绑定到常量左值而不是右值?
- Python绑定似乎是空的