2010-06-22 23 views
7

Gần đây tôi đã cài đặt Boost bằng MacPorts, với mục đích thực hiện một số nhúng Python trong C++. sau đó tôi đã quyết định để kiểm tra xem tôi cấu hình Xcode một cách chính xác với một ví dụ được tìm thấy trên trang web của Python:Boost.Python trên Mac OS X: "TypeError: Tên thuộc tính phải là chuỗi"

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

Nó biên dịch một cách chính xác, nhưng khi tôi khởi động nó, cuộc gọi đến attr() ném một ngoại lệ, và kết quả được thông báo lỗi là "LoạiError: tên thuộc tính phải là chuỗi, không phải là 'str'". Nghe có vẻ nghi ngờ như một trình giữ chỗ.

Tôi đã tìm kiếm trên Google nhưng không may mắn.

Tôi sử dụng Boost v1.39, Python 2.5 và GCC 4.0, trên Leopard.

+0

Khó để nói điều gì sai, mã dường như hoạt động (win/lin, py3, gcc/vs2005/10, tăng 42/43) bạn có kiểm tra xem phiên bản hệ điều hành của bạn có được hỗ trợ chính thức bởi mọi thứ bạn sử dụng không? – pprzemek

+0

Python, Boost và GCC 4 đều được hỗ trợ chính thức trên OS X. Tuy nhiên, thật khó để biết Boost.Python có cụ thể không. Tài liệu của họ có vẻ đã lỗi thời, và có vẻ như nó hoạt động trên OS X 10.3 với Python 2.3 và GCC 3.3, nhưng không có gì về Leopard. Có lẽ đó là vấn đề. Tôi sẽ xem xét nó. –

Trả lời

1

Mã của bạn làm việc cho tôi với các cấu hình sau:

  • của Snow Leopard
  • phiên bản gcc 4.2.1 (. AppleInc xây dựng 5646)
  • Boost 1.41.0 cài đặt vào/usr/local/tăng/1_41_0/
  • Cổ OSX Python 2,5

Biên soạn sử dụng:

01.

g ++ -I/Nhà phát triển/SDK/MacOSX10.6.sdk/Hệ thống/Thư viện/Khung/Python.framework/Phiên bản/2.6/bao gồm/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

Tôi đã thử với Boost 1.42, GCC 4.2 và Python 2.5; Vẫn không làm việc. Tôi chưa thử nó với Snow Leopard ... –