Question

Some strange error appeared after I upgraded my Ubuntu from (10.11, 11.04 i dont know) to 11.10.

I am getting an undefined reference to 'sqrt' while using math.h and linking with -lm

I'm compiling with gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o both source-files use and include math.h.

This code compiled without problems for and I didn't change much since the upgrade but now it won't work.

Do you have any suggestions what I can do, to find the error?

I'm sorry, if this question was asked before; there are so many posts on math linker errors and I didn't find a matching one

Was it helpful?

Solution

The library that you are using needs to be placed after the files that use it when you are using it from the command line. So place -lm on after your C files on the command line.

Reference

OTHER TIPS

SOLVED, this is not the common missing -lm problem! I'm in the same situation after upgrade to (k)ubuntu 11.10!

$ whereis math.h
math: /usr/include/math.h

Makefile:
CC=gcc
CFLAGS=--std=c99 -g -pedantic -Wall -lm

uname:
Linux idefix 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

You really HAVE TO place the -lm swith after -o foo foo.c parameter

Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$

So swap your flags in Makefile! GUYS. This is pretty new (and serious) BUG!

This is a problem due to the default activation of the gcc flag --as-needed in the linker

More information here: http://www.gentoo.org/proj/en/qa/asneeded.xml

Simple fix (worked for me at least):

Add -Wl,--no-as-needed to the linker

I found the same problem after upgrading my Ubuntu to 11.10 version. I use Netbeans for developing and solved the problem by specifying the "Mathematics" standard library as it follows:

Right click on project, click on Properties, select "Linker" on menu, click on "Libraries" and then "Add Standard Library" choosing "Mathematics".

When compiling the '-lm' option is placed after all the other options and it works. Probably this gcc version follows a specific architecture and it expects the libraries at the end of the command compiling line.

Cheers!

D.

cc filename.c -lm

just try..........☻

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top