Hello, all.
I have encountered compile errors on attempt to add Python support to an existing boost installation.
Configuration:
boost 1.33.1
Intel C++ Compiler
8.1.018 for Windows
Python 2.5
// --------Build script (icc_python.bat): -------------
SET INTEL_BASE_MSVC_TOOLSET=vc-7_1
SET TOOLS=intel-win32
SET INTEL_PATH=c:\Install\Intel\CPP\Compiler80\Ia32
SET INTEL_VERSION=81
SET PYTHON_VERSION= 2.5
SET PYTHON_ROOT=C:\Install\Python25
bjam --prefix=C:\prg\boost --with-python install 1>icc_python.log 2>icc_python.err
//----- end of build script ---------
The following errors occur:
C:\prg\boost_1_33_1\boost/python/converter/pyobject_traits.hpp(33): error: expression must have a constant value
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Type);
^
detected during instantiation of class "boost::python::converter::pyobject_traits<PyTypeObject>" at line 33
C:\prg\boost_1_33_1\boost/python/converter/pyobject_traits.hpp(34): error: expression must have a constant value
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(List);
^
detected during instantiation of class "boost::python::converter::pyobject_traits<PyListObject>" at line 34
C:\prg\boost_1_33_1\boost/python/converter/pyobject_traits.hpp(35): error: expression must have a constant value
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Int);
^
detected during instantiation of class "boost::python::converter::pyobject_traits<PyIntObject>" at line 35
..................... and so on ..........
I've made some investigation of the issue. The error occur in file pyobject_traits.hpp in this code:
# define BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(T) \
template <> struct pyobject_traits<Py##T##Object> \
: pyobject_type<Py##T##Object, &Py##T##_Type> {}
// This is not an exhaustive list; should be expanded.
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Type); //line 33
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(List); //line 34
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Int); //line 35
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Long);
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Dict);
BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Tuple);
Variables PyType_Type, PyList_Type, PyInt_Type and etc has type PyTypeObject and defined in Python include files in the following way:
PyAPI_DATA(PyTypeObject) PyList_Type;
PyAPI_DATA is a macro. In this case it unrolls in the code:
extern __declspec(dllimport) PyTypeObject PyList_Type;
So we have the following code after preprocessing:
extern __declspec(dllimport) PyTypeObject PyList_Type;
template <> struct pyobject_traits<PyListObject>
: pyobject_type<PyListObject, &PyList_Type> {};
and it causes error: expression must have a constant value
I tried to explicitly change PyList_Type declaration to:
extern __declspec(dllimport) const PyTypeObject PyList_Type;
but it didn't change anything.
Google didn't tell me anything useful so this list is my last resort. Please, help.
Best regards, Ded Mazay.