我使用的是ubuntu 9.10beta,它的存储库包含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扩展宏为何无效。我在install目录中运行这个示例,因此没有更改jamroot的use project设置。
另一个问题是,如果我随意地在任意目录中启动一个项目,我将如何编写jamroot?
最佳答案
问题来自于使用ubuntu包而不是从源代码编译的boost。您必须编辑jamroot,使其使用全局lib boost python,而不是在相对boost源代码树中查找lib。
概括地说,你在Jamroot的开头就应该有这样的诗句:
using python ;
lib libboost_python : : <name>boost_python ;
project : requirements <library>libboost_python ;
据报道,它是Debian上的一个bug,至少在LeNy上用LiBooStPythOn1.40纠正了。LyBooStyPython中的示例仍然引用BooStyPython MT,而不是BooStyPython,但是/Ur/Lb/LbBooStyPython。因此存在,但不是/Ur/Lb/LbBooStPyPython MT.SO。
希望Ubuntu很快会有同样的修复,下一个用户不会在这个问题上绊倒。我知道你的问题的答案,因为我以前确实有过同样的问题。