内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Python怎么調(diào)用C++通過(guò)Pybind11制作Python接口

本文小編為大家詳細(xì)介紹“Python怎么調(diào)用C++通過(guò)Pybind11制作Python接口”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python怎么調(diào)用C++通過(guò)Pybind11制作Python接口”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

創(chuàng)新互聯(lián)建站專注于新余網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供新余營(yíng)銷型網(wǎng)站建設(shè),新余網(wǎng)站制作、新余網(wǎng)頁(yè)設(shè)計(jì)、新余網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造新余網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供新余網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

1. pybind11簡(jiǎn)介與環(huán)境安裝

pybind11是一個(gè)輕量級(jí)的只包含頭文件的庫(kù),它主要是用來(lái)在已有的 C++代碼的基礎(chǔ)上做擴(kuò)展,它的語(yǔ)法和目標(biāo)非常像Boost.Python,但Boost.Python為了兼容現(xiàn)有的基本所有的C++編譯器而變得非常復(fù)雜和龐大,而因此付出的代價(jià)是很多晦澀的模板技巧以及很多不必要的對(duì)舊版編譯器的支持。Pybind11摒棄了這些支持,它只支持python2.7以上以及C++ 11以上的編譯器,使得它比Boost.Python更加簡(jiǎn)潔高效。

為了使用pybind11,我們需要支持C++ 11標(biāo)準(zhǔn)的編譯器(GCC 4.8以上,VS 2015 Update 3以上)以及python 2.7以上的版本,還需要下載CMake,有了這些以后,

  1. 首先,我們從 pybind11 github網(wǎng)址上下載源碼。

  2. cmake工程之前,要先安裝pytest pip install pytest,否則會(huì)出錯(cuò)

  3. 用CMake編譯并運(yùn)行測(cè)試用例:

進(jìn)入pybind11的目錄,
cd tests
cmake ..
cmake --build . --config Release --target check

如果所有測(cè)試用例都通過(guò)了,說(shuō)明安裝成功了。

2. python調(diào)用C++

下載編譯好pybind11之后,我們就可以開始對(duì)著官方的pybind11 Tutorial進(jìn)行學(xué)習(xí)了,詳細(xì)的入門教程及語(yǔ)法請(qǐng)參考官方文檔,這里,我們簡(jiǎn)單演示下如何編寫供python調(diào)用的C++模塊.
首先,我們編寫一個(gè)C++源文件,命名為example.cpp

#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int i, int j)
{
 return i + j;
}
PYBIND11_MODULE(example, m)
{
 // optional module docstring
 m.doc() = "pybind11 example plugin";
 // expose add function, and add keyword arguments and default arguments
 m.def("add", &add, "A function which adds two numbers", py::arg("i")=1, py::arg("j")=2);
 // exporting variables
 m.attr("the_answer") = 42;
 py::object world = py::cast("World");
 m.attr("what") = world;
}

2.1 使用window編譯

我沒有實(shí)驗(yàn),所以可以參考別的教程

2.2 CMake的編譯方法

當(dāng)然,我們也可以使用CMake進(jìn)行編譯。首先寫一個(gè)CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)
project(example) 
add_subdirectory(pybind11)
pybind11_add_module(example example.cpp)

這里要求example.cpp放在和pybind11同一級(jí)的目錄下,因?yàn)槲覀冊(cè)贑MakeLists.txt中調(diào)用了同目錄pybind11和同目錄的example.cpp文件。在當(dāng)前目錄下執(zhí)行

cmake .
make

會(huì)生成example.cpython-36m-x86_64-linux-gnu.so文件。這個(gè)文件就是python可以調(diào)用的文件。還是在相同目錄下運(yùn)行python,進(jìn)入python命令行

import example
example.add(3, 4)
[out]: 7

3、中級(jí)調(diào)用

上面是一個(gè)簡(jiǎn)單的例子,有時(shí)我們需要的功能可能很復(fù)雜。

生成模型設(shè)計(jì)庫(kù)調(diào)用問(wèn)題。

比如你的cpp文件中引用了其他的第三方庫(kù),這個(gè)時(shí)候我們生成的so文件,可能是需要依賴第三方庫(kù)的。

本地myopencv.cpp文件

#include <pybind11/pybind11.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <string>
namespace py = pybind11;
void read_img(std::string img_path)
{
 cv::Mat image = cv::imread(img_path, CV_LOAD_IMAGE_COLOR);
}
PYBIND11_MODULE(myopencv, m)
{
 m.def("read_img", &read_img, "get image size");
}

CMakeLists.txt可以寫成下面這樣

cmake_minimum_required(VERSION 2.8.12)
project(myopencv)
add_subdirectory(pybind11)
pybind11_add_module(myopencv myopencv.cpp)

通過(guò)cmkae編譯通過(guò)

cmake .
make

產(chǎn)生myopencv.cpython-36m-x86_64-linux-gnu.so文件
在python中調(diào)用

import myopencv

讀到這里,這篇“Python怎么調(diào)用C++通過(guò)Pybind11制作Python接口”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:Python怎么調(diào)用C++通過(guò)Pybind11制作Python接口
文章位置:http://www.rwnh.cn/article24/psghce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、定制開發(fā)、商城網(wǎng)站、企業(yè)建站、網(wǎng)站制作、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
邓州市| 嘉峪关市| 出国| 永嘉县| 乌兰察布市| 深水埗区| 西林县| 富民县| 安多县| 全椒县| 库尔勒市| 怀仁县| 九龙城区| 平江县| 龙里县| 松溪县| 崇仁县| 岳阳市| 运城市| 霍林郭勒市| 常山县| 枣强县| 沂水县| 太和县| 佛教| 马关县| 南通市| 巴东县| 宁德市| 慈溪市| 久治县| 平安县| 施秉县| 汾西县| 府谷县| 云安县| 商水县| 西昌市| 法库县| 石屏县| 手机|