Я знаю, что я не должен публиковать здесь проблемы, связанные с программированием. Но я не мог придумать лучшего места, и оно тоже весьма актуально. Проблема именно в том, что указывает заголовок: когда я пишу программу на языке 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
, не показала такой проблемы.
Когда Вы пользуетесь стандартной библиотекой 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