2010-06-22 35 views
7

我最近使用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。

+0

很難說出了什麼問題,代碼似乎有效(win/lin, py3,gcc/vs2005/10,boost 42/43) 您是否檢查過您的操作系統版本是否由您使用的所有軟件正式支持? – pprzemek 2010-06-23 20:31:45

+0

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

回答

1

您的代碼爲我工作具有以下配置:

  • 雪豹
  • 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

+0

我試着用Boost 1.42,GCC 4.2和Python 2.5;仍然不起作用。我還沒有用雪豹測試它... – 2010-07-07 04:17:32

相關問題