Ian Mordey <ian.mor...@wandisco.com> writes:

> Undefined                       first referenced
>  symbol                             in file
> __sync_add_and_fetch

Modern compilers usually provide fast "atomics" and most code will try
to use compiler atomics if possible.  Subversion itself relies on APR
for atomics so what matters is how you configured and built APR.  I am
surprised Subversion 1.8 and 1.9 are different.  Do they use the same
APR?  Is APR built the same way using the same compiler?

Looking at include/arch/unix/apr_arch_atomic.h in the APR build it
appears that there are three possible atomic implementations on Solaris:
1) generic, 2) builtin, 3) solaris.

>From the error message your build appears to use 2) builtin, so I expect
you to have USE_ATOMICS_GENERIC unset and HAVE_ATOMIC_BUILTINS set.  If
you look at include/arch/unix/apr_private.h in your APR build you should
be able to confirm that.  APR's configure script controls both symbols.

Your compiler is not providing the functions required for 2) builtin to
work.  You can force the APR build to use 1) generic with the configure
option --disable-nonportable-atomics.  It might be better to get APR to
use 3) solaris by unsetting HAVE_ATOMIC_BUILTINS after configure and
before building.

It would be good to understand which atomics you are using, why APR
chooses the wrong ones, how we can fix APR to choose the right ones
automatically, and why 1.8 and 1.9 are different.

-- 
Philip

Reply via email to