![-lm 选项在 GCC 4.8.1 中不起作用](https://linux22.com/image/1045361/-lm%20%E9%80%89%E9%A1%B9%E5%9C%A8%20GCC%204.8.1%20%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我知道我不应该在这里发布与编程相关的问题。但我想不出更好的地方,而且它也非常相关。问题正是标题所表明的:当我用 C 语言编写程序并且它包含它时,它无法#include <math.h>
编译。我尝试了-lm
在线找到的所有选项。当我在 GCC 4.7.3 中工作时,我只需要-lm
在最后添加它就可以了,例如:gcc -o test test.c -lm
。另一件事。在/usr/lib/gcc/i686-linux-gnu
文件夹中,我找到了 4.7 4.7.3 4.8 4.8.1 文件夹。新版本与旧版本是否存在冲突?只有 GCC 改变了程序吗-lm
?请建议如何使用 GCC 4.8.1 编译包含数学库函数的程序。我正在使用 Ubuntu 13.10,我最近从 12.10 更新了它。GCC 的早期版本是 4.7.3。哦,顺便说一下,这是我尝试编译时得到的通常输出:
$ gcc -o test test.c -lm
test.c:1:19: fatal error: stdio.h: No such file or directory
#include <stdio.h>
^
compilation terminated.
存在此问题的示例程序如下:
#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;
}
以下是有关我的 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
并且在 之前没有空格#
。另外,没有包含该stdio.h
指令的程序出现这样的问题。
答案1
当您使用 Ubuntu 官方 GCC 中的 C 标准库时,头文件位于 中/usr/include
。当您运行
ls -l /usr/include/stdio.h /usr/include/math.h
输出表明该目录中缺少头文件,包括stdio.h
和math.h
(您似乎遇到问题的两个头文件)。并且 GCC 的错误消息表明它找不到头文件。
因此,替换丢失的头文件可能会解决这个问题。搜索Ubuntu 软件包数据库揭示/usr/include/stdio.h
和/usr/include/math.h
由提供包裹libc6-dev
。 所以,重新安装libc6-dev
包应该可以解决问题:
sudo apt-get update && sudo apt-get --reinstall install libc6-dev