I have a problem with building pyexiv2 on Mac OS X:
$ cd pyexiv2-0.2.2
$ scons
I get "ld: symbol(s) not found" error
------
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o build/exiv2wrapper.os -c -fPIC -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 src/exiv2wrapper.cpp
g++ -o build/exiv2wrapper_python.os -c -fPIC -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 src/exiv2wrapper_python.cpp
g++ -o build/libexiv2python.dylib -dynamiclib build/exiv2wrapper.os build/exiv2wrapper_python.os -lboost_python-mt -lexiv2
Undefined symbols:
"_PyList_Type", referenced from:
boost::python::converter::pyobject_type<boost::python::list, &(PyList_Type)>::get_pytype()in exiv2wrapper_python.os
boost::python::converter::pyobject_type<boost::python::list, &(PyList_Type)>::check(_object*)in exiv2wrapper_python.os
"_PyExc_KeyError", referenced from:
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
"_PyErr_SetString", referenced from:
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
"_PyInt_FromLong", referenced from:
boost::python::converter::arg_to_python<unsigned int>::arg_to_python(unsigned int const&)in exiv2wrapper.os
boost::python::converter::arg_to_python<int>::arg_to_python(int const&)in exiv2wrapper_python.os
boost::python::to_python_value<int const&>::operator()(int const&) constin exiv2wrapper_python.os
boost::python::to_python_value<unsigned int&>::operator()(unsigned int const&) constin exiv2wrapper_python.os
boost::python::to_python_value<unsigned int const&>::operator()(unsigned int const&) constin exiv2wrapper_python.os
"_PyEval_RestoreThread", referenced from:
exiv2wrapper::Image::getDataBuffer() const in exiv2wrapper.os
exiv2wrapper::Image::writeMetadata() in exiv2wrapper.os
exiv2wrapper::Image::readMetadata() in exiv2wrapper.os
exiv2wrapper::Image::_instantiate_image() in exiv2wrapper.os
"_PyObject_IsInstance", referenced from:
boost::python::converter::pyobject_type<boost::python::list, &(PyList_Type)>::check(_object*)in exiv2wrapper_python.os
boost::python::converter::pyobject_type<boost::python::dict, &(PyDict_Type)>::check(_object*)in exiv2wrapper_python.os
"_PyDict_Type", referenced from:
boost::python::converter::pyobject_type<boost::python::dict, &(PyDict_Type)>::get_pytype()in exiv2wrapper_python.os
boost::python::converter::pyobject_type<boost::python::dict, &(PyDict_Type)>::check(_object*)in exiv2wrapper_python.os
"_PyString_Type", referenced from:
boost::python::to_python_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::get_pytype() constin exiv2wrapper_python.os
boost::python::to_python_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::get_pytype() constin exiv2wrapper_python.os
"_PyExc_RuntimeError", referenced from:
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
"_PyTuple_New", referenced from:
boost::python::tuple boost::python::make_tuple<unsigned int, unsigned int>(unsigned int const&, unsigned int const&)in exiv2wrapper.os
boost::python::tuple boost::python::make_tuple<int, int, int>(int const&, int const&, int const&)in exiv2wrapper_python.os
"_PyTuple_Type", referenced from:
boost::python::converter::pyobject_type<boost::python::tuple, &(PyTuple_Type)>::get_pytype()in exiv2wrapper_python.os
"__Py_NoneStruct", referenced from:
boost::python::api::object::object()in exiv2wrapper.os
boost::python::detail::none() in exiv2wrapper_python.os
boost::python::detail::none() in exiv2wrapper_python.os
boost::python::api::object::object()in exiv2wrapper_python.os
boost::python::scope::scope()in exiv2wrapper_python.os
boost::python::converter::shared_ptr_from_python<exiv2wrapper::ExifTag>::convertible(_object*) in exiv2wrapper_python.os
boost::python::converter::shared_ptr_from_python<exiv2wrapper::IptcTag>::convertible(_object*) in exiv2wrapper_python.os
boost::python::converter::shared_ptr_from_python<exiv2wrapper::XmpTag>::convertible(_object*) in exiv2wrapper_python.os
boost::python::converter::shared_ptr_from_python<exiv2wrapper::Preview>::convertible(_object*) in exiv2wrapper_python.os
boost::python::converter::shared_ptr_from_python<exiv2wrapper::Image>::convertible(_object*) in exiv2wrapper_python.os
"_PyErr_Occurred", referenced from:
boost::python::len(boost::python::api::object const&)in exiv2wrapper.os
"_PyExc_IOError", referenced from:
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
"_PyExc_ValueError", referenced from:
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
"_PyExc_TypeError", referenced from:
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
exiv2wrapper::translateExiv2Error(Exiv2::BasicError<char> const&) in exiv2wrapper.os
"_PyLong_FromUnsignedLong", referenced from:
boost::python::converter::arg_to_python<unsigned int>::arg_to_python(unsigned int const&)in exiv2wrapper.os
boost::python::to_python_value<unsigned int&>::operator()(unsigned int const&) constin exiv2wrapper_python.os
boost::python::to_python_value<unsigned int const&>::operator()(unsigned int const&) constin exiv2wrapper_python.os
"_PyInt_Type", referenced from:
boost::python::to_python_value<int const&>::get_pytype() constin exiv2wrapper_python.os
boost::python::to_python_value<unsigned int&>::get_pytype() constin exiv2wrapper_python.os
boost::python::to_python_value<unsigned int const&>::get_pytype() constin exiv2wrapper_python.os
"_PyBool_FromLong", referenced from:
boost::python::to_python_value<bool const&>::operator()(bool const&) constin exiv2wrapper_python.os
"_PyString_FromStringAndSize", referenced from:
boost::python::converter::arg_to_python<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::arg_to_python(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in exiv2wrapper.os
boost::python::to_python_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) constin exiv2wrapper_python.os
boost::python::to_python_value<std::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) constin exiv2wrapper_python.os
"_PyEval_SaveThread", referenced from:
exiv2wrapper::Image::getDataBuffer() const in exiv2wrapper.os
exiv2wrapper::Image::writeMetadata() in exiv2wrapper.os
exiv2wrapper::Image::readMetadata() in exiv2wrapper.os
exiv2wrapper::Image::_instantiate_image() in exiv2wrapper.os
"_PyBool_Type", referenced from:
boost::python::to_python_value<bool const&>::get_pytype() constin exiv2wrapper_python.os
"_PyObject_Size", referenced from:
boost::python::len(boost::python::api::object const&)in exiv2wrapper.os
ld: symbol(s) not found
collect2: ld returned 1 exit status
scons: *** [build/libexiv2python.dylib] Error 1
scons: building terminated because of errors.