使用Shiboken为C++和Qt库创建Python绑定
2011-05-06 00:00
3183 查看
Shiboken的资料真少,仅仅为了写一个小小的demo就大费周折。但不管怎样,经过几个月断断续续的了解,总算可以为纯C++的库和Qt的库创建Python的绑定了。
本文前提:
- 熟悉cmake,能够用cmake构建C++与Qt的程序和库
- 安装有Python和Shiboken的开发环境
-
安装有PySide和Qt4(4.6及以上)的开发环境
-
注意:若在windows下,Shiboken和PySide开发环境需要自己编译
接下来记录两个例子:(本文例子仅在Windows和Ubuntu环境下进行过测试)
创建C++库的绑定
步骤:
- 创建一个普通的 C++ 的库 foo.dll 或 libfoo.so
- 使用shiboken生成胶水代码
- 编译胶水代码生成绑定库 foo.pyd 或 foo.so
- 编写python程序进行测试
看一下本例用到的所有文件:
|-- CMakeLists.txt | |-- libfoo\ | |-- CMakeLists.txt | |-- foo.h | `-- foo.cpp | |-- foobinding\ | |-- CMakeLists.txt | |-- foo\ | | |-- CMakeLists.txt | | |-- global.h | | `-- typesystem_foo.xml | `-- tests\ | |-- CMakeLists.txt | `-- test_foo.py
顶层的CMakeLists.txt 文件内容如下:
cmake_minimum_required(VERSION 2.8) add_subdirectory(libfoo) add_subdirectory(foobinding) enable_testing()
libfoo
libfoo 中是我们原始的需要绑定的C++代码,可以快速一下这3个文件
- CMakeLists.txt
project(libfoo) set(LIB_SRC foo.cpp) add_definitions("-DLIBFOO_BUILD") add_library(libfoo SHARED ${LIB_SRC}) set_target_properties(libfoo PROPERTIES OUTPUT_NAME "foo")
- foo.h
#ifndef FOO_H #define FOO_H #if defined _WIN32 #if LIBFOO_BUILD #define LIBFOO_API __declspec(dllexport) #else #define LIBFOO_API __declspec(dllimport) #endif #else #define LIBFOO_API #endif class LIBFOO_API Math { public: Math(){} ~Math(){} int squared(int x); }; #endif // FOO_H
- foo.cpp
#include "foo.h" int Math::squared(int x) { return x * x; }
这部分没有什么特别的东西,直接看绑定部分
相关文章推荐
- 使用Shiboken为C++和Qt库创建Python绑定
- 使用C++创建Pyd文件扩展Python模块
- 使用SWIG将C++绑定到python
- 使用SWIG将C++绑定到python
- IronPython for ASP.NET:使用IronPython创建一个简单的Web页面
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- C++中创建并使用Web服务
- 在C++中创建并使用WEB服务
- 在VC6.0中创建和使用静态链接库&&C如何调用C++ 成员函数
- 在C++中创建并使用Web服务 【zz】
- Python在C/C++代码自动生成中的使用
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 使用 Python 创建 UNIX 命令行工具
- (转)使用C/C++扩展Python
- 使用vs2010创建可重用代码(二)Creating and Using a Static Library (C++)
- 简单使用scipy.weave混合使用Python和C++代码的简单例子
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- 《Java编程思想》之对象的创建、使用、生命期(简单比较java与C++的不同之处)
- 使用PYTHON创建XML文档
- 使用vs2005创建智能设备的C#和C++混合项目