-lm option doesn't work in GCC 4.8.1
When you use the C standard library from the official GCC included in Ubuntu, the header files are located in /usr/include
. When you ran
ls -l /usr/include/stdio.h /usr/include/math.h
the output indicated that header files are missing from that directory, including stdio.h
and math.h
(the two headers with which you seem to have had problems). And GCC's error message says it can't find header files.
Therefore, replacing missing header files will likely solve this problem. Searching the Ubuntu packages database reveals /usr/include/stdio.h
and /usr/include/math.h
are provided by the libc6-dev
package. Therefore, reinstalling the libc6-dev
package should fix the problem:
sudo apt-get update && sudo apt-get --reinstall install libc6-dev
nos_feratu
Got no use for routine I shiver at the thought Open skies are my scene That's why I won't get caught
Updated on September 18, 2022Comments
-
nos_feratu over 1 year
I know I'm not supposed to be posting problems related to programming here. But I couldn't think of any better place and it's quite relevant too. The problem is exactly what the title indicates: when I write a program in C language and it contains
#include <math.h>
it doesn't compile. I tried the-lm
option in every variety I could find online. When I worked in GCC 4.7.3 I just had to add the-lm
in the end and it worked, for example:gcc -o test test.c -lm
. Another thing. In/usr/lib/gcc/i686-linux-gnu
folder I found 4.7 4.7.3 4.8 4.8.1 folders. Is it some conflict the new version is having with old ones? And is it just GCC which has changed the procedures of-lm
? Please suggest how I can compile programs containing the math library functions with GCC 4.8.1. And I am using Ubuntu 13.10 which I have recently updated from 12.10. The earlier version of GCC was 4.7.3. Oh by the way, this is the usual output I get when trying to compile:$ gcc -o test test.c -lm test.c:1:19: fatal error: stdio.h: No such file or directory #include <stdio.h> ^ compilation terminated.
A sample program that suffered from this follows:
#include <stdio.h> #include <math.h> int main( void ) { double amount; double principal = 1000.0; double rate = .05; int year; printf( "%4s%21s\n", "Year", "Amount on deposit" ); for ( year = 1; year <= 10; year++ ) { amount = principal * pow( 1.0 + rate, year ); printf( "%4d%21.2f\n", year, amount ); } return 0; }
And here's the information about the current version of my GCC:
$ which -a gcc /usr/bin/gcc $ gcc --version gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ ls -l /usr/include/stdio.h /usr/include/math.h ls: cannot access /usr/include/stdio.h: No such file or directory ls: cannot access /usr/include/math.h: No such file or directory
And there is no whitespace before the
#
. Also, no program containing thestdio.h
directive showed such problem.-
jobin about 10 yearsPlease update your question with the answers to the following: What version of Ubuntu are you using? How did you update gcc?
-
nos_feratu about 10 yearsDone. it's 13.10 and yes, GCC updated when I upgraded my system.
-
nos_feratu about 10 yearsSame problem @souravc
-
nos_feratu about 10 yearsDone. Everything seems to work except
#include <math.h>
@EliahKagan
-