在Mac OS X上使用bjam(Boost.Build)构建Python扩展
根据我的观察,事情是这样的:
- 在
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 上的默认链接器,叫做 ld
或 ld64
,但它没有 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
来编译看看。