FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Fedora User

 
 
LinkBack Thread Tools
 
Old 04-03-2011, 10:25 PM
les
 
Default sinf compiler error I don't understand FIXED!!

On Sun, 2011-04-03 at 00:13 +0100, Ian Malone wrote:
> On 1 April 2011 23:29, les <hlhowell@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
",M_PI);
> > printf ("sin 90 = %e
",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
",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

--
users mailing list
users@lists.fedoraproject.org
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
 

Thread Tools




All times are GMT. The time now is 01:18 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org