Re: cos() in math.h ?
Hi
I was bit by this "bug" in my first real C program. 1986? I looked
HARD. I had to figure it out from the manuals.
With C not including some header files results in a default
prototype being used, int name(...); which may get you linked ok,
but does no checking.
ANSI C is almost C++ The authors compiled all the programs in K&R II
on an early C++ compiler. If you are willing to put up with some
very small differences between the C subset of C++ and gcc's C, you
can avoid this and get considerably more static error checking at
little cost by writing in C and compiling it as C++, with or without
the error checking options below:
#include <stdio.h>
#include <math.h>
int main()
{
printf("%f\n", cos(3.14159263/4));
return 0;
}
Compile:
g++ -W -Wall --pedantic stuff.c
// no compile/link errors
output:
0.707107
As someone points out, including the headers does not get you linked
to the libraries. g++ automatically links to most libraries, as well
as doing a bit more error checking.
--David
David Teague, dbt@cs.wcu.edu
Debian GNU/Linux Because software support is free, timely,
useful, technically accurate, and friendly.
On Thu, 3 Aug 2000, William T Wilson wrote:
> On Thu, 3 Aug 2000, Christophe TROESTLER wrote:
>
> > simply need to include `math.h'. However, when I compile, I got the
> > error:
> >
> > /tmp/cc9WOsLC.o(.text+0x16): undefined reference to `cos'
> > collect2: ld returned 1 exit status
>
> This is actually a linker error - undefined references happen when the
> linker (which might be called by the compiler) tries to assemble the
> object files into an executable, but can't find all the function calls
> that the program wants to make. cos() is in the math library, libm.a. So
> you need to add -lm to the command line.
>
> Including math.h will allow the compiler to compile the object code
> (otherwise you would get warnings or errors about the function declaration
> for cos()) but the actual code that does the computation is in libm.
Reply to: