首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac上的Boost.Python Hello

Mac上的Boost.Python Hello
EN

Stack Overflow用户
提问于 2015-02-17 21:40:56
回答 1查看 5.1K关注 0票数 11

我正在尝试为Boost.Python:0/libs/python/doc/tutorial/doc/html/python/hello.html设置和编译Hello示例

我安装了bjam,boost,boost-build,和boost-python,它们来自Homebrew:

代码语言:javascript
复制
brew install bjam
brew install boost
brew install boost-build
brew install boost-python

我的python安装也是通过Homebrew进行的。我不知道如何正确地修改示例Jamroot文件,使其与我的系统设置兼容。我将boost路径更改为: /usr/local/Cellar/boost;,但不确定需要更改的其他路径。当前的设置给出了以下错误:

代码语言:javascript
复制
> bjam
notice: no Python configured in user-config.jam
notice: will use default configuration
Jamroot:26: in modules.load
*** argument error
* rule use-project ( id : where )
* called with: ( boost : /usr/local/Cellar/boost; project : requirements <library>/boost/python//boost_python <implicit-dependency>/boost//headers : usage-requirements <implicit-dependency>/boost//headers )
* extra argument project
/usr/local/share/boost-build/build/project.jam:1138:see definition of rule 'use-project' being called
/usr/local/share/boost-build/build/project.jam:311: in load-jamfile
/usr/local/share/boost-build/build/project.jam:64: in load
/usr/local/share/boost-build/build/project.jam:145: in project.find
/usr/local/share/boost-build/build-system.jam:535: in load
/usr/local/share/boost-build/kernel/modules.jam:289: in import
/usr/local/share/boost-build/kernel/bootstrap.jam:139: in boost-build
/usr/local/share/boost-build/boost-build.jam:8: in module scope
EN

回答 1

Stack Overflow用户

发布于 2017-08-09 15:24:11

摘要

  1. 不要使用BJAM --这是浪费你的时间--我认为你对BJAM的兴趣是让你的代码真正工作的副产品
  2. 这里是指向我的github页面的快速链接,我在其中做了一个hello_world示例using namespace boost::python
  3. 请参阅我的github将多个boost文件链接到一个导入库

较长答案

我和你的安排完全一样。我花了很长时间才使这个文档工作起来,因为文档确实很不可靠(正如您所知道的),在您知道之前,您会在一些奇怪的兔子洞中试图破解生成文件和BJAM安装。

您可以像通常使用setup.py代码一样使用C,如下所示.

安装

您可以通过以下命令通过homebrew获得正确的boost-python:

代码语言:javascript
复制
brew install boost --with-python --build-from-source

我认为brew安装boost应该能工作,但这是一个很大的安装,而且寿命很短,可以重复两次

升压码

hello_ext.cpp中假设下面的代码

代码语言:javascript
复制
#include <boost/python.hpp>

char const* greet()
{
   return "Greetings!";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

Python设置

然后,您可以将setup.py文件写成

代码语言:javascript
复制
from distutils.core import setup
from distutils.extension import Extension

hello_ext = Extension(
    'hello_ext',
    sources=['hello_ext.cpp'],
    libraries=['boost_python-mt'],
)

setup(
    name='hello-world',
    version='0.1',
    ext_modules=[hello_ext])

编撰

以下示例可供下列人员使用:

代码语言:javascript
复制
python setup.py build_ext --inplace

它将创建以下构建/目录和文件:

代码语言:javascript
复制
build/
hello_ext.so

正在运行

现在,python可以通过以下方式直接调用这一点:

代码语言:javascript
复制
In [1]: import hello_ext

In [2]: hello_ext.greet()
Out[2]: 'Greetings!'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28571611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档