Mac OS X上的Boost.Python:“TypeError:属性名称必须是字符串”
我最近使用MacPorts安装了Boost,目的是在C++中执行一些Python嵌入。然后,我决定进去看看我用Python的网站上发现了一个例子正确配置的Xcode:Mac OS X上的Boost.Python:“TypeError:属性名称必须是字符串”
#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:属性名称必须是字符串,而不是'str'”。这可疑听起来像一个占位符。
我在Google上查了一下,但没有运气。
我在Leopard上使用Boost v1.39,Python 2.5和GCC 4.0。
您的代码为我工作具有以下配置:
- 雪豹
- gcc版本4.2.1(AppleInc建立5646)
- 升压1.41.0安装到/ usr /本地/ :升压/ 1_41_0/
- 库存OSX的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
我试着用Boost 1.42,GCC 4.2和Python 2.5;仍然不起作用。我还没有用雪豹测试它... – 2010-07-07 04:17:32
很难说出了什么问题,代码似乎有效(win/lin, py3,gcc/vs2005/10,boost 42/43) 您是否检查过您的操作系统版本是否由您使用的所有软件正式支持? – pprzemek 2010-06-23 20:31:45
Python,Boost和GCC 4在OS X上都得到官方支持。但是,很难判断Boost.Python是否具体。他们的文档看起来已经过时了,而且它似乎可以在Python 2.3和GCC 3.3上使用OS X 10.3,但对Leopard一无所知。也许这就是问题所在。我会研究它。 – 2010-06-23 21:23:08