Mac OS X上的Boost.Python:“TypeError: 属性名必须是字符串”
我最近通过MacPorts安装了Boost,打算在C++中嵌入一些Python代码。然后我决定检查一下Xcode的配置是否正确,找了一个Python官网上的示例:
#include <boost/python.hpp>
using namespace boost::python;
int main( int argc, char ** argv )
{
try
{
Py_Initialize();
object main_module(handle<>(borrowed(PyImport_AddModule("__main__"))));
object main_namespace = main_module.attr("__dict__");
handle<> ignored(PyRun_String("print \"Hello, World\"",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr()));
}
catch( error_already_set )
{
PyErr_Print();
}
}
这个示例可以正常编译,但当我运行它时,调用attr()时出现了一个异常,错误信息是"TypeError: attribute name must be string, not 'str'"。这听起来有点像是个占位符。
我在谷歌上查了一下,但没有找到解决办法。
我使用的是Boost v1.39、Python 2.5和GCC 4.0,运行在Leopard系统上。
1 个回答
1
你的代码在我这里可以正常运行,以下是我的配置:
- 操作系统:Snow Leopard
- 编译器版本:gcc 4.2.1(这是苹果公司构建的版本)
- Boost库版本:1.41.0,安装在/usr/local/boost/1_41_0/目录下
- 系统自带的Python版本:2.5
编译时使用的命令是:
g++ -I/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/ -I/usr/local/boost/1_41_0/include -L/usr/local/boost/1_41_0/lib/ -boost_python -L/usr/lib/python2.6/config -lpython2.6 test.cpp