Building asterisk - undefined reference to `__sync_fetch_and_add_4'

Ian FREISLICH ianf at clue.co.za
Mon Sep 10 05:36:10 PDT 2007


Luigi Rizzo wrote:
> On Mon, Sep 10, 2007 at 12:04:10PM +0200, Ian FREISLICH wrote:
> > Hi
> > 
> > I was wondering if anyone else is having this problem building
> > asterisk on -CURRENT.  The problem may not be with FreeBSD - it
> > looks like gnu configure is incorrectly detecting the CPU as "i386"
> > when it's actually a pentium3:
> > 
> > configure: Package configured for: 
> > configure: OS type  : freebsd7.0
> > configure: Host CPU : i386
> > ===>  Building for asterisk-1.4.11
> > 
> > The i386 doesn't have any atomic primatives or something like that
> > (maybe just according to gcc-4.2).  If I frob the configured sources
> > and change the i386 to pentium3, then the build works, but I don't
> > have enough asterisk foo at this point to verify that it actually
> > works.
> 
> i don't completely understand what is happening here - i386 presumably
> refers to the architecture, not to the very-low-level details of
> the architecture, so there should not be anything specific to
> one processor of the family in the flags passed to the compiler.

The trouble is that the asterisk build translates this into -march=i386
and -mcpu=i386 or -mtune=i386 which has that low level effect.  At
least the old asterisk port did this, I haven't yet figured out
what the new 1.4.11 asterisk is doing.

I'm inclined to believe that i386 in the FreeBSD context means
something fundamentally different to the same in the Linux context.

> Could it be that it's a compiler bug instead (or something in
> your /etc/make.conf which is forcing compiler-specific optimizations
> but only for a part of the build or the libraries) ?

It builds if I don't set CPUTYPE=p3 in /etc/make.conf.  So, I guess
that's the fix.

Ian

--
Ian Freislich



More information about the freebsd-current mailing list