Mac OS X problem

Asked by pymind

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.

Question information

Language:
English Edit question
Status:
Solved
For:
pyexiv2 Edit question
Assignee:
robinmills Edit question
Solved by:
robinmills
Solved:
Last query:
Last reply:
Revision history for this message
Olivier Tilloy (osomon) said :
#1

pyexiv2 is not officially supported on MacOS X yet (but this is planned).

However Robin Mills did some nice work to generate a Mac universal build recently. I assigned the question to him, he may be able to share his work with you.

@Robin: I haven’t forgotten your contributions and I definitely want to merge them, I have other items on my list right now but I hope to get to it soon enough.

Revision history for this message
robinmills (robinmills) said :
#2

Thanks, Olivier

I'll have a look at that later today. The Mac's in our bedroom and my wife's sleeping in there. My first guess is that he doesn't have doesn't have the python-boost library built!

Robin

-----Original Message-----
From: <email address hidden> [mailto:<email address hidden>] On Behalf Of Olivier Tilloy
Sent: Monday, January 10, 2011 03:56
To: <email address hidden>
Subject: Re: [Question #140742]: Mac OS X problem

Question #140742 on pyexiv2 changed:
https://answers.launchpad.net/pyexiv2/+question/140742

Olivier Tilloy posted a new comment:
pyexiv2 is not officially supported on MacOS X yet (but this is planned).

However Robin Mills did some nice work to generate a Mac universal build recently. I assigned the question to him, he may be able to share his work with you.

@Robin: I haven’t forgotten your contributions and I definitely want to merge them, I have other items on my list right now but I hope to get to it soon enough.

--
You received this question notification because you are the assignee for this question.

Revision history for this message
Best robinmills (robinmills) said :
#3

I think this issue is being caused by not linking the Python Framework. With pyexiv2 0.2 (and 0.13), I added:

env['FRAMEWORKS'] += ['Python']

to the src/SConscript file to fix this (there are other changes to that file - however this is change to fix the linking issue).

I have successfully built and executed pyexiv2 0.13/python 2.5 and pyexiv2 0.2/python 2.6 (universal ppc/i386/x86_64) with some effort and the changes to SConscript were forward to Olivier. If the decision is taken to support Mac (and MSVC) builds, I will be very happy to work with the pyexiv2 team to make this happen.

Revision history for this message
Olivier Tilloy (osomon) said :
#4

Thanks for the help Robin, always much appreciated.

@pymind, does this change to the SConscript file fix your problem?

Revision history for this message
pymind (pymind) said :
#5

Thank you. Now it works fine. Here is what i had to do to get it work:
$ brew install scons boost boost-jam exiv2
$ cd pyexiv2-0.2.2
$ vi src/SConscript # I just added: env['FRAMEWORKS'] += ['Python']
$ scons BOOSTLIB=boost_python-mt
$ scons install
$ ln -s /Library/Python/2.6/site-packages/libexiv2python.dylib /Library/Python/2.6/site-packages/libexiv2python.so

That's it. Thank you.

Revision history for this message
pymind (pymind) said :
#6

Thanks robinmills, that solved my question.

Revision history for this message
Olivier Tilloy (osomon) said :
#7

Awesome, thanks for the feedback pymind, that’s precious information!

Revision history for this message
fregment (fg-fregment) said :
#8

Hello! I am as well trying to build pyexiv2 for OS X (10.6) without any success so far, although I was very happy to find this post, it still gives me the same (or very similar error) as the one posted here. I've been following the instructions given by pymind, but still no success.
Has anybody an idea what else it could be? Below is the error I get after doing the following:

$ brew install scons boost boost-jam exiv2
$ cd pyexiv2-0.2.2
$ vi src/SConscript # I added: env['FRAMEWORKS'] += ['Python'] below the line env = Environment()
$ scons BOOSTLIB=boost_python-mt

Thank you very much, Frederic

This is the output I get after executing "scons BOOSTLIB=boost_python-mt":

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o build/libexiv2python.dylib -dynamiclib build/exiv2wrapper.os build/exiv2wrapper_python.os -lboost_python-mt -lexiv2 -framework Python
ld: warning: in /Library/Frameworks//Python.framework/Python, missing required architecture x86_64 in file
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
  "_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
  "_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<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
  "_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<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.

Revision history for this message
Olivier Tilloy (osomon) said :
#9

Hi Frederic,
I haven’t tried it myself, but from a very quick glance, it looks like the first warning issued by ld (in /Library/Frameworks//Python.framework/Python, missing required architecture x86_64 in file) is related to the undefined symbols errors you are getting afterwards. It looks like your installation of Python targets the wrong architecture (e.g. x86 on a 64 bits platform).

Revision history for this message
robinmills (robinmills) said :
#10

I'll take a look at this on Tuesday evening (can't do it this evening).

Revision history for this message
fregment (fg-fregment) said :
#11

Thanks Olivier and Robin, it was the x86_64 problem. I should have read the error more carefully :) Now it works like a charm...