При использовании компилятора gcc в Linux, часто можно наткнуться на следующую проблему. Имеется файл sample.cpp с подключенным заголовком стандартной библиотеки iostream:
#include <iostream>
int func()
{
return 7;
}
int main()
{
std::cout << func();
}
При компиляции такого исходника возникает ошибка:
$ gcc sample.cpp
/tmp/ccl7O2ra.o: In function `main':
sample.cpp:(.text+0x17): undefined reference to `std::cout'
Почему так происходит? Потому что что библиотека iostream хоть и системная, хоть и входит в стандарт C++ STL, но все-таки библиотека. И чтобы достучаться до реализаций функций стандартной библиотеки, в строке компиляции надо ее подключить.
Правильная команда компиляции должна выглядеть следующим образом:
$ gcc sample.cpp -lstdc++
С такой командой сборка из исходника пройдет без ошибки.
Еще одним вариантом решения будет использовать не GCC (который является GNU compile collection), а напрямую плюсовый компилятор, который называется g++.