Linux Mint下編譯和配置Boost.Python(for Python3)

聽說(shuō)宰翅,Python是一門很好的粘合劑語(yǔ)言弃甥。哦,現(xiàn)在出到3版本了汁讼,2版本已停止了任何的新特性添加淆攻。最近常用C/C++寫性能密集型的程序,C++雖好嘿架,奈何處理交互相對(duì)繁瑣瓶珊。于是就想到了使用Python,如果能將C++的性能與Python的靈活結(jié)合起來(lái)耸彪,豈不美哉伞芹?

說(shuō)干就干,上網(wǎng)找到了一些相關(guān)的庫(kù),在其中發(fā)現(xiàn)了一個(gè)叫Boost.Python的東西唱较。其他的庫(kù)大都需要自己去封面向Python的接口扎唾,而用Boost,一個(gè)宏就可以搞定南缓,不得不感嘆Boost的強(qiáng)大胸遇。

Boost中的大多數(shù)模塊在使用的時(shí)候僅需引頭文件,但Boost.Python不然汉形,必須編譯纸镊。我的軟件環(huán)境是:Mint 18.1、Boost 1.64

選定了使用Boost.Python后才發(fā)現(xiàn)資料難找概疆,官方網(wǎng)站上的教程并沒(méi)能帶我飛薄腻,而其他資料中面向Python3 build的太少。于是開始自己跳坑填坑届案,最后成了庵楷。
流程如下:

sudo apt install python3-dev build-essential

./bootstrap.sh --with-python=python3.5

./b2
sudo ./b2 install

根本不用官網(wǎng)上說(shuō)的那個(gè)什么user-config.jam,在運(yùn)行bootstrap.sh時(shí)指定版本就完事(一定要寫Python3啊楣颠,不然build出來(lái)應(yīng)該是2)尽纽。運(yùn)行bootstrap.sh之后目錄下會(huì)生成project-config.jam文件,如果你想使用的Python不在默認(rèn)路徑童漩,就在這個(gè)文件中改弄贿,打開就能找到!

b2相當(dāng)于編譯矫膨,b2 install就是安裝差凹。這里是直接安裝到默認(rèn)路徑(官網(wǎng)上說(shuō)了怎么安裝到其他路徑)。

安裝完以后侧馅,大功告成危尿。趕快編譯一個(gè)庫(kù)嘗試一下。這里使用CMake馁痴。例子是從官網(wǎng)借的谊娇。

//greet.h
#ifndef GREET_H_
#define GREET_H_

char const *greet();

#endif // GREET_H_
//greet.cpp
#include "greet.h"

char const *greet() {
    return "Hello world";
}
//greet_ext.cpp
#include "greet.h"
#include <boost/python.hpp>

BOOST_PYTHON_MODULE (greet_ext)
{
    using namespace boost::python;
    def("greet", greet);
}
#CMakeLists.txt
cmake_minimum_required(VERSION 3.7)
project(untitled)

# Find necessary packages
find_package(PythonLibs 3.5 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIR})
find_package(Boost COMPONENTS python3 REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES greet_ext.cpp greet.cpp greet.h)
set(PYTHON_INCLUDE_DIR "/usr/include/python3.5")

add_library(greet_ext SHARED ${SOURCE_FILES})
target_link_libraries(greet_ext ${Boost_LIBRARIES})
set_target_properties(greet_ext PROPERTIES PREFIX "")

之所以指定PYTHON_INCLUDE_DIR是因?yàn)槲野l(fā)現(xiàn)在Mint下CMake總是找到Python2而不是3,在Ubuntu中好像沒(méi)有這個(gè)問(wèn)題罗晕。另外BOOST_PYTHON_MODULE宏指定的名字"greet_ext"必須和add_library以及target_link_libraries指定的一致济欢。set_target_properties是用來(lái)去掉生成的庫(kù)的文件名前綴。

好了小渊,到這里全部結(jié)束法褥。編譯,然后打開終端酬屉,進(jìn)入生成庫(kù)(greet_ext.so)所在的目錄半等。呼出python3,
import greet_ext
greet_ext.greet()
有沒(méi)有看到它say hello啊酱鸭?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吗垮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凹髓,更是在濱河造成了極大的恐慌烁登,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔚舀,死亡現(xiàn)場(chǎng)離奇詭異饵沧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赌躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門狼牺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人礼患,你說(shuō)我怎么就攤上這事是钥。” “怎么了缅叠?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵悄泥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肤粱,道長(zhǎng)弹囚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任领曼,我火速辦了婚禮鸥鹉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庶骄。我一直安慰自己毁渗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布瓢姻。 她就那樣靜靜地躺著祝蝠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幻碱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天细溅,我揣著相機(jī)與錄音褥傍,去河邊找鬼。 笑死喇聊,一個(gè)胖子當(dāng)著我的面吹牛恍风,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼朋贬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凯楔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起锦募,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摆屯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后糠亩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虐骑,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年赎线,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了廷没。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垂寥,死狀恐怖颠黎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滞项,我是刑警寧澤狭归,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站蓖扑,受9級(jí)特大地震影響唉铜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜律杠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一潭流、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柜去,春花似錦灰嫉、人聲如沸宏赘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)述吸。三九已至泄隔,卻和暖如春女轿,著一層夾襖步出監(jiān)牢的瞬間纠拔,已是汗流浹背付鹿。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工物蝙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炎滞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓诬乞,卻偏偏與公主長(zhǎng)得像册赛,于是被迫代替她去往敵國(guó)和親钠导。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富森瘪,涉及面非常廣牡属。awesome-p...
    若與閱讀 18,644評(píng)論 4 418
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,480評(píng)論 6 427
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)扼睬,斷路器逮栅,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • Boost庫(kù)下載地址 編譯 生成boost的自用的編譯工具bjam.exe 解壓后,使用Visual Studio...
    elivera閱讀 30,876評(píng)論 1 12
  • 在老王意識(shí)模糊地閉上雙眼之前痰驱,窗外的遠(yuǎn)處又傳來(lái)那一陣歌聲证芭。麻木的眼神盯著天花板,隨著血流從頸項(xiàng)噴出担映,他忘記所有記憶...
    Adm_w閱讀 267評(píng)論 0 0