
On Fri, Apr 4, 2008 at 1:35 PM, Schrader, Glenn <gschrad@ll.mit.edu> wrote:
I cannot link against Boost libraries 1.35.0 built with CodeSourcery's ARM/GNU toolchain, although the build is successful. ...
undefined reference to `__sync_fetch_and_add_4' collect2: ld returned 1 exit status
With assistance on the boost-build list I've ascertained that the problem is that GCC doesn't support __sync_fetch_and_add and the other atomic built-ins on ARM. An additional case for this may need to be added to boost/detail/sp_counted_base.hpp
I don't know enough to patch boost for this, short-term or otherwise; can anyone offer any advice?
Two workarounds are available: define BOOST_SP_DISABLE_THREADS to disable MT-safety for the reference count, or define BOOST_SP_USE_PTHREADS to use a pthread_mutex.
Another option would be to just supply the __sync_fetch_and_add_4 function that gcc is trying to link in. When gcc doesn't support the builtin it assumes that a function exists with that name. A snippet of ARM assembly to implement the atomic operation shouldn't be that difficult.
Perhaps not for you. I am a novice when it comes to any assembly, and have never even touched ARM assembly. If you can provide the ARM equivalent operation I would be extremely grateful, but I am unable to code it myself unfortunately.