Mac OS X 上的 Boost.Python:“类型错误:属性名称必须是字符串”

发布于 2024-09-06 04:41:18 字数 928 浏览 5 评论 0原文

我最近使用 MacPorts 安装了 Boost,目的是在 C++ 中进行一些 Python 嵌入。然后我决定使用 Python 网站上找到的示例检查我是否正确配置了 Xcode:

#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””。这听起来很像一个占位符。

我在谷歌上查了一下,但没有运气。

我在 Leopard 上使用 Boost v1.39、Python 2.5 和 GCC 4.0。

I recently installed Boost using MacPorts, with the intent to do some Python embedding in C++. I then decided to check if I configured Xcode correctly with an example found on Python's website:

#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();
    }
}

It compiles correctly, but when I launch it, the call to attr() throws an exception, and the resulting error message is "TypeError: attribute name must be string, not 'str'". Which suspiciously sounds like a placeholder.

I looked it up on Google, but no luck.

I use Boost v1.39, Python 2.5 and GCC 4.0, on Leopard.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星光不落少年眉 2024-09-13 04:41:18

您的代码使用以下配置对我有用:

  • Snow Leopard
  • gcc 版本 4.2.1 (AppleInc. build 5646)
  • Boost 1.41.0 安装到 /usr/local/boost/1_41_0/
  • Stock 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

Your code worked for me with the following configuration:

  • Snow Leopard
  • gcc version 4.2.1 (AppleInc. build 5646)
  • Boost 1.41.0 installed to /usr/local/boost/1_41_0/
  • Stock OSX Python 2.5

Compiled using:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文