導航:首頁 > 編程語言 > lboostpython

lboostpython

發布時間:2023-09-19 01:31:15

① 如何編譯C++文件為python擴展模塊

大概有三種常用方法:
1>使用ctypes模塊來調用C寫的共享庫,比如:
[python] view plain print?
#測試ctypes調用linux動態庫的能力
from ctypes import *
lib = CDLL("libc.so.6")
printf = lib.printf
printf("Hello World\n")

#查找動態庫
from ctypes.util import find_library
print find_library('c')
output = CDLL(find_library("c")).printf
output("測試成功!\n")
但是用它來調用C++寫的so就不太合適,因為編譯時c++函數名修飾會給你的函數取一個特殊的字元串,你不能在你的python代碼里直接使用此函數名,除非你使用的是修飾後的函數名。(在linux下你可以用nm來查看so中的函數名)

2>用C來寫python的擴展模塊,這個沒怎麼用過,以後使用時再記錄在此。
3>用C++來寫python擴展模塊:
我是使用Boost.Python來寫擴展的,先上工作中的代碼片段:

[python] view plain print?
#include <boost/python.hpp> //包含boost.python頭文件
#include <cstdio>
#include <string>

using namespace boost::python;//引入命令空間

class lshw //定義一個類
{
public:
lshw();
virtual ~lshw();

void scan_device();
string get_xml();

private:
hwNode *computer;
};

lshw::lshw()
{
computer = new hwNode("computer", hw::system);
}

lshw::~lshw()
{
if (computer)
delete computer;
}

void lshw::scan_device()
{
enable("output:numeric");
disable("output:sanitize");
scan_system(*computer);
}

string lshw::get_xml()
{
return computer->asXML();
}

void hello()
{
std::cout << "Hello World!" <<std::endl;
}

BOOST_PYTHON_MODULE(lshw)
{
class_<lshw, boost::nonable > ("lshw", "This is a lshw project python extend", init<>())//導出類中的方法
.def("scan_device", &lshw::scan_device)
.def("get_xml", &lshw::get_xml)
;
def("hello",&hello);//導出方法
}
使用boost.python其實結構很簡單,你只要寫很少的boost.python的代碼,你可以把大部分的精力放在C++功能代碼上,花很少的精力就可以把它擴展成python的模塊。下面是我在Ubuntu11.10上的編譯過程:

首先安裝boost.python:
sudo apt-get install libboost-python1.46.1
再來編譯生成so共享庫文件:
g++ -shared -fPIC lshw.cc -o lshw.so -lboost_python
使用:
[python] view plain print?
import lshw
hw = lshw.lshw()
lshw.hello()
hw.scan_device()
xml = self.hw.get_xml()

② python調用c函數

如果有一堆\0,你怎麼知道這個指針指向的內容什麼時候結束?比如應該讀取10個位元組,還是100個位元組。
最起碼要加一個標示指針所指內容長度的參數。

閱讀全文

與lboostpython相關的資料

熱點內容
小熊編程教程 瀏覽:908
word轉換成pdf轉換器免費下載 瀏覽:608
群體智能基本演算法 瀏覽:370
可編程軟體分為哪兩種 瀏覽:340
格林什麼app可以看 瀏覽:697
飛盧app仙俠熱賣推薦怎麼樣 瀏覽:722
飛秋上傳文件到共享文件夾 瀏覽:691
伺服器的共享文件夾如何訪問 瀏覽:232
復盛螺桿壓縮機講解 瀏覽:332
柱在基礎插筋需要加密嗎 瀏覽:80
51單片機中斷寄存器 瀏覽:65
壓縮文件後有病毒怎麼辦 瀏覽:618
蘋果ipad怎麼登安卓王者賬號 瀏覽:862
街頭足球伺服器已滿是什麼意思 瀏覽:462
androidspeex迴音消除 瀏覽:133
加密會議什麼意思 瀏覽:34
ubuntu命令行聯網 瀏覽:7
37選7中獎概率及演算法 瀏覽:593
加密狗哪個版本好 瀏覽:619
cisco命令手冊 瀏覽:502