Вопрос Опция -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
2018-03-02 16:36


происхождения


Пожалуйста, обновите свой вопрос, ответив на следующее: Какую версию Ubuntu вы используете? Как вы обновили gcc? - jobin
Готово. это 13.10, и да, GCC обновился, когда я обновил свою систему. - nos_feratu
Такая же проблема @souravc - nos_feratu
Готово. Кажется, все работает, кроме #include <math.h> @EliahKagan - nos_feratu


ответы:


Когда вы используете стандартную библиотеку 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
2018-03-02 19:11