7

私は最近、MacPorts を使用して Boost をインストールしました。これは、C++ に Python を埋め込むことを目的としています。次に、Python の Web サイトにある例を使用して、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: attribute name must be string, not 'str'" になります。疑わしいことに、プレースホルダーのように聞こえます。

Googleで調べましたが、運がありません。

Leopard で Boost v1.39、Python 2.5、および GCC 4.0 を使用しています。

4

1 に答える 1

1

あなたのコードは、次の構成で機能しました。

  • ユキヒョウ
  • gcc バージョン 4.2.1 (AppleInc. ビルド 5646)
  • Boost 1.41.0 を /usr/local/boost/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

于 2010-07-06T13:16:15.167 に答える