ошибка компиляции g ++ - PullRequest
       12

ошибка компиляции g ++

8 голосов
/ 27 июля 2011

Я новичок в Ubuntu. Я попытался скомпилировать простой "Hello World!" код c ++ в Ubuntu 11.04, с этим кодом (в терминале):

gcc -Wall -W -Werror tex.cpp -o tex. 

но компилятор вернул много ошибок:

/tmp/ccL8c1p8.o: In function `main':
tex.cpp:(.text+0xa): undefined reference to `std::cout'
tex.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccL8c1p8.o: In function `__static_initialization_and_destruction_0(int, int)':
tex.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
tex.cpp:(.text+0x42): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status
mohrd@mio:~$ gcc -Wall -W -Werror tex.cpp -o tex.
/tmp/ccEke5JP.o: In function `main':
tex.cpp:(.text+0xa): undefined reference to `std::cout'
tex.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccEke5JP.o: In function `__static_initialization_and_destruction_0(int, int)':
tex.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
tex.cpp:(.text+0x42): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

простой код:

#include <algorithm>
#include <iostream>
using namespace std;

int main ()
{
  std::cout << "Hello World!";
  return 0;
}

Почему? и что мне делать ???

большое спасибо ...

Ответы [ 4 ]

32 голосов
/ 27 июля 2011

Вам нужно использовать команду g ++ (или c ++) для компиляции вашей программы, использование "gcc" скомпилирует ее как c ++ из-за расширения .cpp, но не ссылки в необходимых библиотеках c ++.

5 голосов
/ 27 июля 2011

Используйте g ++ вместо gcc для компиляции кода C ++:

g++ -Wall -W -Werror tex.cpp -o tex

gcc по умолчанию не связывает библиотеку stdc ++, которая требуется для вашего кода.

4 голосов
/ 27 июля 2011

Используйте команду g++ вместо gcc.

1 голос
/ 27 июля 2011

Попробуйте:

g++ -Wall hello.cpp -o hello

Поскольку вы пытаетесь скомпилировать C++ код, а не C код!

-Wall означает Warning ALL, поэтому вы уже увидите все предупреждения

Кроме того, назовите ваши программы и исходные файлы осмысленно!

LE: конечно -Werror остается вашим выбором

LE2: вам не нужен #include <algorithm> в вашем коде, так что вы можете удалить его!

...