Linux Mint下编译和配置Boost.Python(for Python3)

听说,Python是一门很好的粘合剂语言。哦,现在出到3版本了,2版本已停止了任何的新特性添加。最近常用C/C++写性能密集型的程序,C++虽好,奈何处理交互相对繁琐。于是就想到了使用Python,如果能将C++的性能与Python的灵活结合起来,岂不美哉?

说干就干,上网找到了一些相关的库,在其中发现了一个叫Boost.Python的东西。其他的库大都需要自己去封面向Python的接口,而用Boost,一个宏就可以搞定,不得不感叹Boost的强大。

Boost中的大多数模块在使用的时候仅需引头文件,但Boost.Python不然,必须编译。我的软件环境是:Mint 18.1、Boost 1.64

选定了使用Boost.Python后才发现资料难找,官方网站上的教程并没能带我飞,而其他资料中面向Python3 build的太少。于是开始自己跳坑填坑,最后成了。
流程如下:

sudo apt install python3-dev build-essential

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

./b2
sudo ./b2 install

根本不用官网上说的那个什么user-config.jam,在运行bootstrap.sh时指定版本就完事(一定要写Python3啊,不然build出来应该是2)。运行bootstrap.sh之后目录下会生成project-config.jam文件,如果你想使用的Python不在默认路径,就在这个文件中改,打开就能找到!

b2相当于编译,b2 install就是安装。这里是直接安装到默认路径(官网上说了怎么安装到其他路径)。

安装完以后,大功告成。赶快编译一个库尝试一下。这里使用CMake。例子是从官网借的。

//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是因为我发现在Mint下CMake总是找到Python2而不是3,在Ubuntu中好像没有这个问题。另外BOOST_PYTHON_MODULE宏指定的名字"greet_ext"必须和add_library以及target_link_libraries指定的一致。set_target_properties是用来去掉生成的库的文件名前缀。

好了,到这里全部结束。编译,然后打开终端,进入生成库(greet_ext.so)所在的目录。呼出python3,
import greet_ext
greet_ext.greet()
有没有看到它say hello啊?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,751评论 4 418
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,568评论 6 427
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,937评论 18 139
  • Boost库下载地址 编译 生成boost的自用的编译工具bjam.exe 解压后,使用Visual Studio...
    elivera阅读 30,979评论 1 12
  • 在老王意识模糊地闭上双眼之前,窗外的远处又传来那一阵歌声。麻木的眼神盯着天花板,随着血流从颈项喷出,他忘记所有记忆...
    Adm_w阅读 288评论 0 0