Почему я получаю & ldquo; undefined reference & rdquo; ошибки компиляции простой C ++-программы с gcc?

Я пытаюсь скомпилировать c ++ в Ubuntu. Я пишу свой код в Gedit, это простой проект hello world. Я перехожу к терминалу, чтобы запустить его с gcc helloworld.cc, и это сообщение появляется:

/tmp/ccy83619.o: In function `main': helloworld.cc:(.text+0xa): undefined reference to `std::cout' helloworld.cc:(.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/ccy83619.o: In function `__static_initialization_and_destruction_0(int, int)': helloworld.cc:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()' helloworld.cc:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld returned 1 exit status

Что это значит и от чего я могу перейти отсюда?

3
задан 19 November 2017 в 01:01

2 ответа

Программы на C ++ должны быть связаны с стандартной библиотекой C ++. Хотя вы можете связать стандартную библиотеку вручную, то есть gcc -o hello hello.cpp -lstdc++, обычно это не делается. Вместо этого вы должны использовать g++ вместо gcc, который автоматически связывает libstdc++.

Пример. (

$ cat hello.cpp #include <iostream> int main(void) { std::cout << "Hello world" << std::endl; return 0; }

, тогда

$ gcc -o hello hello.cpp /tmp/ccty9cjF.o: In function `main': hello.cpp:(.text+0xa): undefined reference to `std::cout' hello.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*)' hello.cpp:(.text+0x14): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))' /tmp/ccty9cjF.o: In function `__static_initialization_and_destruction_0(int, int)': hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()' hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld returned 1 exit status

, тогда как

g++ -o hello hello.cpp $ ./hello Hello world
3
ответ дан 18 July 2018 в 03:02

Программы на C ++ должны быть связаны с стандартной библиотекой C ++. Хотя вы можете связать стандартную библиотеку вручную, то есть gcc -o hello hello.cpp -lstdc++, обычно это не делается. Вместо этого вы должны использовать g++ вместо gcc, который автоматически связывает libstdc++.

Пример. (

$ cat hello.cpp #include <iostream> int main(void) { std::cout << "Hello world" << std::endl; return 0; }

, тогда

$ gcc -o hello hello.cpp /tmp/ccty9cjF.o: In function `main': hello.cpp:(.text+0xa): undefined reference to `std::cout' hello.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*)' hello.cpp:(.text+0x14): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))' /tmp/ccty9cjF.o: In function `__static_initialization_and_destruction_0(int, int)': hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()' hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld returned 1 exit status

, тогда как

g++ -o hello hello.cpp $ ./hello Hello world
3
ответ дан 24 July 2018 в 17:43

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

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