-lm não funciona no GCC 4.8.1

2

Eu sei que não devo postar problemas relacionados à programação aqui. Mas eu não conseguia pensar em nenhum lugar melhor e é bastante relevante também. O problema é exatamente o que o título indica: quando escrevo um programa em linguagem C e contém #include <math.h> ele não compila. Eu tentei a opção -lm em todas as variedades que encontrei on-line. Quando trabalhei no GCC 4.7.3, tive que adicionar o -lm no final e funcionou, por exemplo: gcc -o test test.c -lm . Outra coisa. Na pasta /usr/lib/gcc/i686-linux-gnu encontrei 4.7 4.7.3 4.8 4.8.1 pastas. É algum conflito que a nova versão está tendo com os antigos? E é apenas o GCC que mudou os procedimentos de -lm ? Por favor, sugira como eu posso compilar programas contendo as funções de biblioteca de matemática com o GCC 4.8.1. E estou usando o Ubuntu 13.10 que atualizei recentemente a partir de 12.10. A versão anterior do GCC era 4.7.3. Ah, a propósito, esta é a saída usual que eu recebo ao tentar compilar:

$ gcc -o test test.c -lm
test.c:1:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
               ^
compilation terminated.

Um exemplo de programa que sofreu com isso segue:

#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;
}

E aqui estão as informações sobre a versão atual do meu 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

E não há espaços em branco antes do # . Além disso, nenhum programa contendo a diretiva stdio.h mostrou esse problema.

    
por nos_feratu 02.03.2014 / 17:36

1 resposta

2

Quando você usa a biblioteca padrão C do GCC oficial incluído no Ubuntu, os arquivos de cabeçalho estão localizados em /usr/include . Quando você correu

ls -l /usr/include/stdio.h /usr/include/math.h

a saída indicou que faltam arquivos de cabeçalho desse diretório, incluindo stdio.h e math.h (os dois cabeçalhos com os quais você parece ter tido problemas). E a mensagem de erro do GCC diz que não é possível encontrar arquivos de cabeçalho.

Portanto, a substituição de arquivos de cabeçalho ausentes provavelmente resolverá esse problema. Pesquisando o banco de dados de pacotes do Ubuntu revela /usr/include/stdio.h e /usr/include/math.h são fornecidos por libc6-dev package . Portanto, reinstalar o libc6-dev package deve corrigir o problema:

sudo apt-get update && sudo apt-get --reinstall install libc6-dev
    
por Eliah Kagan 02.03.2014 / 20:11