2012-06-18 5 views
0

У меня есть простой кусок кода С ++:Почему g ++ связывает стандартную библиотеку?

#include <iostream> 
using namespace std; 

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

Когда я произвожу сборку этого кода я получаю огромный файл сборки, который я полагаю, является составление стандартной библиотеки. Почему это происходит и как я могу это предотвратить?

+4

Определить «Огромный». Я получаю файл 7.4kb с использованием -O3. – mfontanini

+0

@mabs: Если вы уверены, что не хотите, чтобы какой-либо из стандартных заголовков вы могли передать '-nostdinc' в командную строку компилятора. – dirkgently

+0

+1 к mfontanini, и, пожалуйста, укажите свой компилятор и настройки. – unkulunkulu

ответ

0

Большая часть стандартной библиотеки состоит из шаблонов. Когда вы используете шаблон, он становится специализированным для вашего использования, и специализация будет частью вашего двоичного кода. Этого нельзя избежать, хотя вы можете обеспечить специализацию только в одном из ваших единиц перевода, используя внешние шаблоны.

-2

std :: cout является частью стандартной библиотеки.

Вы использовали его.

Довольно очевидный действительно.

Iostreams - это шаблоны, поэтому код испускается в вашем объекте, а не в разделяемой библиотеке, но с оптимизацией включен (лишенный) размер не должен быть больше, чем необходимо для реализации вашего helloworld.

См. http://www2.research.att.com/~bs/bs_faq.html#Hello-world для получения другого ответа.

+0

, если вы так выразились, почему же вы не включаете 'printf' и др., Когда используете его? и это, конечно, риторический вопрос. – unkulunkulu