-lm 选项在 GCC 4.8.1 中不起作用

-lm 选项在 GCC 4.8.1 中不起作用

我知道我不应该在这里发布与编程相关的问题。但我想不出更好的地方,而且它也非常相关。问题正是标题所表明的:当我用 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.hmath.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

相关内容