sinf compiler error I don't understand FIXED!!

les hlhowell at pacbell.net
Sun Apr 3 22:25:24 UTC 2011


On Sun, 2011-04-03 at 00:13 +0100, Ian Malone wrote:
> On 1 April 2011 23:29, les <hlhowell at pacbell.net> wrote:
> > First let me say, that while I have used C++ I don't normally use it for
> > my work and so am not throughly familiar with what it does, so if this
> > is due to a C++ error, please be gentle.
> >
> > I am working on some DSP code I developed a long time ago, and now want
> > to port it to 64 bit.  I have read several articles on the differences
> > in C and C++ between 32 and 64 bit, but this has me stymied.
> >
> > Here is the smallest sample I have been working with to show the current
> > error:
> >
> > #include <math.h>
> > #include <stdlib.h>
> > #include <stdio.h>
> > #include <string.h>
> >
> > main()
> > {
> >    long double temp;
> >    printf ("M_PI=%e\n",M_PI);
> >    printf ("sin 90 = %e\n",sinf(M_PI/2));
> >    temp=M_PI/2.0;
> > // the following line won't compile for temp
> > // regardless of how temp is declared (float, double, long double)
> > //   printf ("sin 90 = %e\n",sinf(temp));
> > }
> >
> >
> > Clearly sinf is recognized, and compiles and runs.  It returns 1.000 as
> > expected for M_PI/2.  But the line that is commented out will not
> > compile.
> >
> > If you can see the issue here, please let me know.
> >
> 
> > yum info GCC shows:
> > Name        : gcc
> > Arch        : x86_64
> > Version     : 4.5.1
> > Release     : 4.fc14
> >
> 
> F13 here:
> Name        : gcc
> Arch        : x86_64
> Version     : 4.4.5
> Release     : 2.fc13
> 
> How are you compiling it? If I uncomment the last printf then compile like:
> $ g++ test.cc -Wall -o test
> 
> I get:
> test.cc:6: warning: ISO C++ forbids declaration of ‘main’ with no type
> 
> But otherwise compiles and runs as expected. I'd point out that sinf
> is float precision, sin is double and sinl long double. With c++ I
> might expect type issues (as you did in your comment), but struggling
> to see anything wrong with this. Any particular error when it fails to
> compile?
> 
The first response found the error -lm which fired up the linker with
the module.  Apparently the compiler auto replaced sinf(M_PI/2) with a
constant and didn't throw the linker error, where as the second one put
in the call to the math library and threw the error.  Adding -lm loads
the library. 

	I was compiling as C, but thought the error might have come due to my
miscalling gcc thus invoking the C++ compiler and missing something to
call the correct sin function i.e. sin/sinf/sinl etc.  But I had written
good code, just misinterpreted the error and forgot the link argument.
I guess the C++ form as you used probably seeks to find any libraries
required by the code, preventing linker errors.  That is probably a good
thing.

	I will probably use a make file in the ultimate project and would have
likely caught the problem then, but the night before was an allnighter,
so I was foggy (and being an old fogey, that is double fog).

Regards,
Les H



More information about the users mailing list