2010-06-22 18 views
7

Son zamanlarda C++ 'da bazı Python gömme niyetiyle MacPorts'u kullanarak Boost'u yükledim.Boost.Python: "TypeError: Öznitelik adının dize olması gerekir"

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

Bu doğru derler, ama bunu başlattığınızda, çağrı (attr için), bir istisna atar ve ortaya çıkan hata mesajı: Python'ın web sitesinde bulunabilir bir örnekle doğru Xcode yapılandırılmışsa Sonra kontrol kararı "TypeError: öznitelik adı dize olmalı," str "değil". Hangi şüpheli bir yer tutucu gibi geliyor.

Google'a baktım ama şans yok.

Boost v1.39, Python 2.5 ve GCC 4.0'ı Leopard'da kullanıyorum.

+0

Neyin yanlış olduğunu söylemek zor, kod çalışıyor gibi görünüyor (win/lin, py3, gcc/vs2005/10, destek 42/43) İşletim sisteminizin sürümünün, kullandığınız her şey tarafından resmi olarak desteklenip desteklenmediğini kontrol ettiniz mi? – pprzemek

+0

Python, Boost ve GCC 4'ün tümü OS X'de resmi olarak desteklenir. Ancak, Boost.Python'un özellikle olup olmadığını söylemek zor. Dokümantasyon eskimiş gibi görünüyor ve OS X 10.3 üzerinde Python 2.3 ve GCC 3.3 ile çalışmış gibi görünüyor, ama Leopard hakkında bir şey yok. Belki de sorun budur. Ben ona bakacağım. –

cevap

1

Kodunuz aşağıdaki yapılandırma ile benim için çalıştı:

  • gcc sürüm 4.2.1 yüklü
  • Boost 1.41.0 (. Khronos Group'dan lisanslı Apple 5646 build)

    • Snow Leopard/usr/local/

      : boost/1_41_0/
    • Stok OSX Python 2,5

    kullanarak Derleyen

    g ++ -I/Geliştirici/SDK/MacOSX10.6.sdk/Sistem/Kitaplık/Çerçeveler/Python.framework/Sürümler/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 ve Python 2.5 ile çalıştım; hala çalışmıyor. Snow Leopard'la test etmem gerekiyor ... –

    İlgili konular