опция -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, не показала такой проблемы.

2
задан 2 March 2014 в 22:46

1 ответ

Когда Вы пользуетесь стандартной библиотекой C от официального GCC, включенного в Ubuntu, заголовочные файлы расположены в /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
2
ответ дан 2 March 2014 в 22:46

Другие вопросы по тегам:

Похожие вопросы: