在Mac OS X上使用bjam(Boost.Build)构建Python扩展

1 投票
1 回答
743 浏览
提问于 2025-04-16 03:32

根据我的观察,事情是这样的:

  • python.jam 文件中,它会找出我正在使用哪个版本的 Python,以及要查看哪些库的目录;
  • 它在 g++ 命令行中添加了 -Wl-R 参数,以包含这些目录;
  • 但是 ld 命令抱怨说它没有 -R 这个选项。

所以要么是 (a) 我用的 ld 版本有问题,要么是 (b) 我需要告诉 bjam 它需要使用不同的选项(也许是 -rpath?)或者说这个选项其实不需要。

我一定是漏掉了什么——我肯定不是历史上第一个在 Mac OS X 上尝试用 Boost 构建 Python 扩展的人——但我就是不知道接下来该去哪里找。有没有什么提示?

更新:

我使用的命令是

bjam

如果我输入 bjam --version,我得到的是

Boost.Build V2 (Milestone 12)
Boost.Jam 03.1.18

使用的工具集是 Mac OS X 上的默认工具集。

编译器是 Mac OS X 上的默认编译器(安装了开发者工具),是 GCC 版本 ‘i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)’。

链接器是 Mac OS X 上的默认链接器,叫做 ldld64,但它没有 GNU ld-R 选项,所以我猜这是一个特别版本,设计用来支持 Mac OS X 的框架概念。它没有 --version 这个选项。

这里有一个 Jamfile,内容如下:

import python ;

python-extension _optimor :
    bill_python.cpp
    bill_record_python.cpp
    .. etc ...
    :
    <cxxflags>-fPIC
    ... etc ...
    <variant>debug:<define>DEBUG
    <include>/usr/include/python2.6
    <include>../
    ;

在 Ubuntu GNU/Linux 上构建是没问题的。

我对 Boost 或 bjam 本身并不感兴趣;我唯一的要求是编译这个扩展,以便我可以继续开发这个扩展在系统中占据小但重要的部分。

1 个回答

3

我看不出你用的Boost版本是什么。不过,问题最可能的原因是你在用通用的“gcc”工具来编译。其实,苹果在Xcode里用的是一种特别的GCC工具。试试用 bjam toolset=darwin 来编译看看。

撰写回答