[osg-users] G++ version problem
aluaces at udc.es
Mon Apr 4 00:33:32 PDT 2011
Hi Mathias, Grahame,
Mathias Fröhlich writes:
> Good morning,
> On Monday 04 April 2011, Grahame Bowland wrote:
>> `__sync_bool_compare_and_swap_4' src.cxx:(.text+0x78): undefined reference
>> to `__sync_bool_compare_and_swap_4' collect2: ld returned 1 exit status
>> gmake: *** [cmTryCompileExec] Error 1
>> gmake: *** [cmTryCompileExec/fast] Error 2
>> It does seem the builtins are disabled. As Alberto said probably because
>> they're not available for the default 32-bit compiler target, Here's the
>> 'g++ -v' output:
>> Using built-in specs.
>> Target: i686-pc-linux-gnu
>> Configured with: ./configure --prefix=/opt/gcc-4.4.3
>> --with-mpfr=/opt/mpfr-2.3.2 --enable-languages=c,c++,objc Thread model:
>> gcc version 4.4.3 (GCC)
> There is a configure time switch in gcc that changes the default architecture.
> Distributions usually have their compiler configured for something that
> includes support for atomics. But your hand configured gcc uses the really
> conservative i386 (not i486, really 80386) default which did not have any smp
> support at this very old time.
> So either give -march=i686 or something sensible for your project to the c and
> c++ flags when doing the cmake configure step. Or rebuild gcc with the
> configure flag --with-cpu=i686 or something sensible for your build
> environment. Then rebuild osg from scratch.
I agree; if you are only going to use that OSG version with the same
computer or with another having the same or later CPU, maybe the easiest
way is to use -march=native as I said earlier. If you are not sure about
what kind of processors are going to run the code, you'll have to find a
common base architecture like the one suggested by Mathias, -march=i686.
There is a comprehensive list at
Again, please note that this will enforce a constraint on the minimum
CPU requirement for the systems running your software.
More information about the osg-users