如何在Ubuntu 9.10上构建Boost.Python示例?
我正在使用Ubuntu 9.10 beta版本,这个版本的库里有boost 1.38。我想要构建一个“hello-world”的示例。我按照这里的说明进行了操作(http://www.boost.org/doc/libs/1_40_0/libs/python/doc/tutorial/doc/html/python/hello.html),找到了示例项目,并输入了“bjam”命令。我已经安装了bjam和boost-build。
我得到了以下输出:
Jamroot:18: in modules.load
rule python-extension unknown in module Jamfile</usr/share/doc/libboost1.38-doc/examples/libs/python/example>.
/usr/share/boost-build/build/project.jam:312: in load-jamfile
/usr/share/boost-build/build/project.jam:68: in load
/usr/share/boost-build/build/project.jam:170: in project.find
/usr/share/boost-build/build-system.jam:248: in load
/usr/share/boost-build/kernel/modules.jam:261: in import
/usr/share/boost-build/kernel/bootstrap.jam:132: in boost-build
/usr/share/doc/libboost1.38-doc/examples/libs/python/example/boost-build.jam:7: in module scope
我对Boost了解得不够(这对我来说是个探索性的练习),所以不明白为什么在包含的Jamroot中,python-extension这个宏不合法。我是在安装目录下运行这个示例的,所以我没有更改Jamroot的use-project设置。
另外,如果我随便在一个目录下开始一个项目,我该如何写我的jamroot呢?
1 个回答
这个问题是因为你使用了Ubuntu的包,而不是从源代码编译的boost。你需要修改你的Jamroot文件,让它使用全局的libboost-python,而不是在相对的boost源代码树中寻找库。
简单来说,你的Jamroot开头应该有这些行:
using python ;
lib libboost_python : : <name>boost_python ;
project : requirements <library>libboost_python ;
这个问题在Debian上被报告为一个bug,并且在lenny版本中至少已经修复了libboost-python1.40……大部分情况下。libboost_python中的示例仍然提到boost_python-mt,而不是boost_python,但/usr/lib/libboost_python.so是存在的,而/usr/lib/libboost_python-mt.so则不存在。
希望Ubuntu也能尽快修复这个问题,这样下一个用户就不会遇到同样的麻烦……我知道你的问题的答案,因为我确实不久前遇到过完全相同的问题。