GCC может определить, на каком языке файл, на основе расширения файла. Тем не менее, GCC автоматически не связывает во время выполнения поддержку для любого языка, кроме C. На практике это означает, что вы можете компилировать программы на C ++, используя gcc
вместо g++
, но вам нужно добавить директиву -lstdc++
:
#include <iostream>
int main()
{
std::cout << "Hello world\n";
}
g++ hello.cc
gcc hello.cc -lstdc++
Точнее, вам нужно будет указать -lstdc++
, если вы используете стандартную библиотеку, исключения, оператор new
или RTTI. Например, попробуйте скомпилировать следующее без -lstdc++
:
int main()
{
try {
throw 1;
}
catch (int i)
{
return i;
}
}
Обратите внимание, что контейнеры STL (включая std::string
s) по умолчанию используют оператор new
. Строго говоря, вы должны иметь возможность использовать алгоритмы (std::min
, std::find_first_of
и т. Д.) И некоторые другие вещи в стандартной библиотеке без -lstdc++
, но по большей части вы могли бы также включить его (компоновщик) будет игнорировать любые библиотеки, на которые вы на самом деле не ссылаетесь).