代码之家  ›  专栏  ›  技术社区  ›  Etienne de Martel

mac os x上的boost.python:“typeerror:属性名必须是字符串”

  •  7
  • Etienne de Martel  · 技术社区  · 16 年前

    我最近安装了Boost使用Mac端口,目的是在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:属性名必须是string,而不是'str'” . 听起来像占位符。

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

    我在leopard上使用boost v1.39、python 2.5和gcc 4.0。

    1 回复  |  直到 15 年前
        1
  •  1
  •   synthesizerpatel    16 年前

    您的代码在以下配置下对我有效:

    • 雪豹
    • GCC版本4.2.1(应用建造5646)
    • boost 1.41.0安装到/usr/local/boost/1_41_0/
    • 股票OSX蟒蛇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

    推荐文章