Search code examples
pythonc++boost

Exposing C++ to Python error from BoostPython


I'm exposing a simple C++ code to Python through BoostPython library:

#include <boost/python/detail/wrap_python.hpp>
#include <boost/python.hpp>

using namespace boost::python;

bool test_api( void ){
   return true;
};

BOOST_PYTHON_MODULE(materials) {

   def( "test_api", test_api );

}

After I try to import this module, the python interpreter returns the error:

ImportError: ./example.so: undefined symbol: _Py_RefTotal

I've linked the module statically against the boost python library and the python dynamic libraries libpython3.2m.so and libpython3.2m.so.1.0 are present in the work directory.

Any suggestions on where to find the missing symbol?


Solution

  • The Boost libraries were not consistent with the Python installation.

    cd boost_source
    ./bootstrap.sh --with-libraries=python --prefix=../boost_target
    

    To configure Boost to point to the correct Python installation:

    vim tools/build/v2/user-config.jam
    

    Edit the line that points to the Python:

    using python : version_number
                 : path_to_python_executable 
                 : path_to_python_include_directory 
                 : path_to_python_library_directory
    

    Then, run the build system:

    ./b2