aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/articles/custom-gcc/article.xml
diff options
context:
space:
mode:
authorGabor Kovesdan <gabor@FreeBSD.org>2012-10-01 09:53:01 +0000
committerGabor Kovesdan <gabor@FreeBSD.org>2012-10-01 09:53:01 +0000
commitb4346b9b2dfe86a97907573086dff096850dcb1d (patch)
tree9b951977cbd22dada9b868ac83b1d56791ea3859 /ru_RU.KOI8-R/articles/custom-gcc/article.xml
parentbee5d224febbeba11356aa848006a4f5f9e24b30 (diff)
downloaddoc-b4346b9b2dfe86a97907573086dff096850dcb1d.tar.gz
doc-b4346b9b2dfe86a97907573086dff096850dcb1d.zip
- Rename .sgml files to .xml
- Reflect the rename in referencing files Approved by: doceng (implicit)
Notes
Notes: svn path=/head/; revision=39631
Diffstat (limited to 'ru_RU.KOI8-R/articles/custom-gcc/article.xml')
-rw-r--r--ru_RU.KOI8-R/articles/custom-gcc/article.xml240
1 files changed, 240 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/articles/custom-gcc/article.xml b/ru_RU.KOI8-R/articles/custom-gcc/article.xml
new file mode 100644
index 0000000000..56fda754e4
--- /dev/null
+++ b/ru_RU.KOI8-R/articles/custom-gcc/article.xml
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="koi8-r" standalone="no"?>
+<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
+ "../../../share/sgml/freebsd42.dtd" [
+<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//RU" "../../share/sgml/entities.ent">
+%entities;
+]>
+
+<!--
+ The FreeBSD Russian Documentation Project
+ $FreeBSD$
+ Original revision: r34679
+-->
+
+<!-- Перевод: Коренко Тарас -->
+
+<article lang="ru">
+ <articleinfo>
+ <title>Использование более новых версий <application>GCC</application>
+ и <application>binutils</application> c коллекцией портов
+ &os;</title>
+
+ <author>
+ <firstname>Martin</firstname>
+ <surname>Matuska</surname>
+ <affiliation>
+ <address><email>mm@FreeBSD.org</email></address>
+ </affiliation>
+ </author>
+
+ <legalnotice id="trademarks" role="trademarks">
+ &tm-attrib.freebsd;
+ &tm-attrib.general;
+ </legalnotice>
+
+ <copyright>
+ <year>2009</year>
+ <holder>The &os; Documentation Project</holder>
+ </copyright>
+
+ <pubdate>$FreeBSD$</pubdate>
+
+ <releaseinfo>$FreeBSD$</releaseinfo>
+
+ <abstract>
+ <para>В этой статье описано, как использовать более новые версии
+ компиляторов <application>GCC</application> и набора утилит
+ <application>binutils</application> из коллекции портов &os;.
+ Здесь также обсуждаются специализированные конфигурации
+ <application>GCC</application>.</para>
+ </abstract>
+ </articleinfo>
+
+ <sect1 id="intro">
+ <title>Предисловие</title>
+
+ <para>Компилятор, поставляемый с &os; 8.0, &mdash; это
+ <application>GCC</application> версии 4.2.1. В базовую систему
+ &os; включены <application>binutils</application> версии
+ 2.15. Это довольно-таки старые версии, и в них, между прочим,
+ отсутствует поддержка новых инструкций <acronym>CPU</acronym>, таких
+ как <acronym>SSSE3</acronym>, <acronym>SSE4.1</acronym>,
+ <acronym>SSE4.2</acronym> и т.п. Ввиду лицензионных ограничений,
+ новые версии этих приложений не будут включены в базовую систему.
+ К счастью, есть возможность использовать более новую версию компилятора
+ <application>GCC</application> (например, версию 4.4)
+ установив его из коллекции портов &os;.</para>
+ </sect1>
+
+ <sect1 id="prerequisites">
+ <title>Подготовка</title>
+
+ <sect2 id="installing-binutils">
+ <title>Установка binutils из портов</title>
+
+ <para>Чтобы задействовать все новые функциональные возможности
+ последней версии <application>GCC</application>, желательна установка
+ наиболее новой версии <application>binutils</application>. Это
+ не является обязательным, но без обновления
+ <application>binutils</application> вы не получите поддержку
+ новых инструкций <acronym>CPU</acronym>.</para>
+
+ <para>Для того, чтоб установить наиболее новую версию
+ <application>binutils</application> используя коллекцию портов
+ &os;, выполните следующую команду:</para>
+
+ <screen>&prompt.root; <userinput>cd /usr/ports/devel/binutils && make install</userinput></screen>
+ </sect2>
+
+ <sect2 id="installing-gcc">
+ <title>Установка GCC из портов</title>
+
+ <para>
+ В коллекции портов &os; можно найти несколько новых версий
+ <application>GCC</application>. В нашем примере мы устанавливаем
+ стабильную версию 4.4. Однако, возможно установить предыдущую
+ или более новую (развивающуюся) версию (например:
+ <filename role="package">lang/gcc43</filename> или
+ <filename role="package">lang/gcc45</filename>).</para>
+
+ <para>Для установки одного из вышеупомянутых портов
+ <application>GCC</application>, наберите следующую команду:</para>
+
+ <screen>&prompt.root; <userinput>cd /usr/ports/lang/<replaceable>gcc44</replaceable> && make install</userinput></screen>
+ </sect2>
+ </sect1>
+
+ <sect1 id="configuring-ports-gcc">
+ <title>Настройка портов на использование требуемой
+ версии <application>GCC</application></title>
+
+ <para>Для использования требуемой версии <application>GCC</application>,
+ установленной из коллекции портов &os, требуется дополнительная
+ конфигурация системы.</para>
+
+ <sect2 id="adjusting-make.conf">
+ <title>Изменения в <filename>make.conf</filename></title>
+
+ <para>Добавьте следующие строки в <filename>/etc/make.conf</filename>
+ (или исправьте существующие):</para>
+
+ <programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
+CC=gcc44
+CXX=g++44
+CPP=cpp44
+.endif</programlisting>
+
+ <para>В качестве альтернативы, можно установить вручную переменные
+ окружения <envar>${CC}</envar> и <envar>${CPP}</envar>.</para>
+
+ <note>
+ <para>Примеры, приведённые выше, сделаны для
+ <application>GCC</application> версии 4.4. Для того, чтобы
+ использовать <command>gcc43</command>, замените
+ <literal>"gcc44"</literal> на <literal>"gcc43"</literal> и
+ <literal>"4.4"</literal> на <literal>"4.3"</literal>
+ и т.п.</para>
+ </note>
+ </sect2>
+
+ <sect2 id="adjusting-libmap.conf">
+ <title>Исправления в <filename>libmap.conf</filename></title>
+
+ <para>Многие установленные из портов приложения и библиотеки
+ скомпонованы с libgcc_s или libstdc++. В базовую систему уже
+ включены эти библиотеки, но от более старой версии
+ <application>GCC</application> (версии 4.2.1). Чтобы предоставить
+ rltd (и ldd) правильные версии, добавьте следующие записи к
+ <filename>/etc/libmap.conf</filename> (или измените
+ существующие):</para>
+
+ <programlisting>libgcc_s.so.1 gcc44/libgcc_s.so.1
+libgomp.so.1 gcc44/libgomp.so.1
+libobjc.so.3 gcc44/libobjc.so.2
+libssp.so.0 gcc44/libssp.so.0
+libstdc++.so.6 gcc44/libstdc++.so.6</programlisting>
+
+ <note>
+ <para>Пример выше приведен для <application>GCC</application>
+ версии 4.4. Если вы используете <command>gcc43</command>,
+ замените <literal>"gcc44"</literal> на <literal>"gcc43"</literal>
+ и т.д. Следует отметить, что все вышеупомянутые библиотеки
+ обратно совместимы с библиотеками, поставляемыми с базовой
+ системой.</para>
+ </note>
+
+ <warning>
+ <para>Некоторые C++ программы могут перестать работать, если
+ отсутствует корректная компоновка этих библиотек. Если невозможно
+ скомпоновать их все, рекомендуется сделать это по крайней мере
+ для libstdc++.so.</para>
+ </warning>
+ </sect2>
+
+ <sect2 id="custom-cflags">
+ <title>Специальные установки <literal>CFLAGS</literal> для коллекции
+ портов</title>
+
+ <para>Для портов, не поддерживающих специальные установки
+ <literal>CFLAGS</literal>, исправьте
+ <filename>/etc/make.conf</filename> согласно следующему примеру:</para>
+
+ <programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
+CC=gcc44
+CXX=g++44
+CPP=cpp44
+CFLAGS+=-mssse3
+.endif</programlisting>
+
+ <para>Возможно заменить полностью <literal>CFLAGS</literal> и/или
+ определить <literal>CPUTYPE</literal>. Мы рекомендуем устанавливать
+ <literal>CPUTYPE</literal> так как во многих портах флаги оптимизации
+ выбираются, базируясь на значении этой переменной.</para>
+ </sect2>
+
+ <sect2 id="excluding-unbuildable-ports">
+ <title>Исключение портов, которые не собираются с новой версией
+ <application>GCC</application></title>
+
+ <para>Для того, чтобы исключить порты, которые не собираются со
+ специальной версией <application>GCC</application>, исправьте
+ <filename>/etc/make.conf</filename> согласно следующему
+ примеру:</para>
+
+ <programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
+.if empty(.CURDIR:M/usr/ports/net/openldap*)
+CC=gcc44
+CXX=g++44
+CPP=cpp44
+.endif
+.endif</programlisting>
+
+ <para>Пример, приведённый выше, отменяет принудительное использование
+ <command>gcc</command> 4.4 для портов
+ <filename role="package">net/openldap</filename>*. Также
+ возможно указать больше портов в одной строке:</para>
+
+ <programlisting>.if empty(.CURDIR:M/usr/ports/net/openldap*) && empty(.CURDIR:M/usr/ports/xxx/yyy) && ...</programlisting>
+ </sect2>
+ </sect1>
+
+ <sect1 id="performance-imparct">
+ <title>Влияние на производительность исполняемых файлов</title>
+
+ <para>Использование <application>GCC</application> версии 4.4 с
+ разрешенным набором инструкций <acronym>SSSE3</acronym>
+ (если они поддерживаются <acronym>CPU</acronym>) может дать до 10%
+ увеличения средней производительности исполняемых файлов. В некоторых
+ тестах прирост производительности превышал 20% (например, в обработке
+ мультимедийных данных).</para>
+
+ <para>В таблице, размещенной на <ulink
+ url="http://people.freebsd.org/~mm/benchmarks/perlbench/"></ulink>,
+ показано сравнение <application>GCC</application> в настоящее время
+ включенного в базу &os;, <application>GCC</application> версии 4.3 и
+ <application>GCC</application> версии 4.4 с различными комбинациями
+ <literal>CFLAGS</literal>. Для сравнений производительности
+ использовался тестовый пакет perlbench.</para>
+
+ </sect1>
+</article>