2016-10-27 2 views
-3

У меня есть этот простой файл, называемый lol.cНе можете компилировать любой C++ файл

#include <iostream> 

using namespace std; 

int main() { 
    return(0); 
} 

С терминала, я типа g++ lol.c

Это выход:

In file included from /usr/include/wchar.h:36:0, 
      from /usr/include/c++/4.9/cwchar:44, 
      from /usr/include/c++/4.9/bits/postypes.h:40, 
      from /usr/include/c++/4.9/iosfwd:40, 
      from /usr/include/c++/4.9/ios:38, 
      from /usr/include/c++/4.9/ostream:38, 
      from /usr/include/c++/4.9/iostream:39, 
      from lol.c:1: 



/usr/include/stdio.h:30:22: fatal error: SDL_main.h: File o directory non esistente 
#include "SDL_main.h" 
        ^
compilation terminated. 

Я не» t знаю, что проблема - что-то с SDL, но когда я пытаюсь запустить ../configure, чтобы установить его, у меня есть следующее:

configure: error: cannot run C compiled programs. 

See `config.log' for more details 

Если это необходимо, я могу поместить файл config.log.

ответ

2

Есть несколько проблем:

  • вы дали .c расширения для исходного файла C++; это неверно, файлы C++ должны иметь .cpp (или .cxx, .C, .c++, последние два немного нахмурены), или компилятор может попытаться скомпилировать его как код C;
  • Вы вызываете gcc вместо g ++; это тоже неправильно, вызов gcc на C++-файлах пропускает несколько параметров, необходимых для правильной компиляции и ссылки (включая, помимо прочего, ссылку на стандартную библиотеку C++);, который был в более старой версии вопроса, теперь он говорит g ++;
  • но самое главное, ваша строительная среда полностью сломана (некоторые сказали бы «FUBAR»); это не нормальный, что /usr/include/stdio.h включает в себя материал из SDL (факт, что он не может быть найден, является лишь незначительным инцидентом по сравнению с этим); вы должны действительно очистить и переустановить все, что связано с gcc, и заголовки библиотеки C; найдите какой-нибудь пакет libc6-dev (или аналогичный) для переустановки (будьте осторожны, чтобы не испортить библиотеку C, или ваша система может быть практически не загружена).
1

Вы не можете указать .c (c расширение) в файл C++.

1 - Измените его на .cpp (C++ расширение, lol.cpp)

2 - Вы должны дать варианты г ++ (в вашем случае использования -o, чтобы создать исполняемый файл) g++ lol.cpp -o nameofyourprogram

3 - Выполнение через ваш терминал ./nameofyourprogram

+0

вариант 2 не требуется. '-o' означает изменить имя выходного файла, это не означает создание исполняемого файла. Использование 'g ++ lol.cpp' без' -c' означает создание исполняемого файла. Имя вывода по умолчанию будет использоваться, если вы не измените имя на '-o'. –

+0

Правильно! благодаря! –

Смежные вопросы