1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<title>
5.2. Binutils-2.43.1 - Проход 1
</title>
<link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" />
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" />
<link rel="stylesheet" href="../stylesheets/lfs-print.css" type=
"text/css" media="print" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body class="lfs" id="lfs-12.2">
<div class="navheader">
<h4>
Линукс с нуля - Версия 12.2
</h4>
<h3>
Глава 5. Сборка кросс-тулчейна
</h3>
<ul>
<li class="prev">
<a accesskey="p" href="introduction.html" title=
"Введение">Пред.</a>
<p>
Введение
</p>
</li>
<li class="next">
<a accesskey="n" href="gcc-pass1.html" title=
"GCC-14.2.0 - Проход 1">След.</a>
<p>
GCC-14.2.0 - Проход 1
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter05.html" title=
"Глава 5. Сборка кросс-тулчейна">Наверх</a>
</li>
<li class="home">
<a accesskey="h" href="../index.html" title=
"Линукс с нуля - Версия 12.2">Начало</a>
</li>
</ul>
</div>
<h1 class="sect1">
<a id="ch-tools-binutils-pass1" name="ch-tools-binutils-pass1"></a>5.2.
Binutils-2.43.1 - Проход 1
</h1>
<div class="wrap" lang="ru" xml:lang="ru">
<div class="package" lang="ru" xml:lang="ru">
<p>
Пакет Binutils содержит компоновщик, ассемблер и другие инструменты
для работы с объектными файлами.
</p>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong class="segtitle">Приблизительное время сборки:</strong>
<span class="segbody">1 SBU</span>
</div>
<div class="seg">
<strong class="segtitle">Требуемое дисковое
пространство:</strong> <span class="segbody">677 MB</span>
</div>
</div>
</div>
</div>
<div class="installation" lang="ru" xml:lang="ru">
<h2 class="sect2">
5.2.1. Установка кросс-пакета Binutils
</h2>
<div class="admon note">
<img alt="[Примечание]" src="../images/note.png" />
<h3>
Примечание
</h3>
<p>
Вернитесь назад и перечитайте примечания в разделе <a class=
"xref" href="../partintro/generalinstructions.html" title=
"Общие инструкции по компиляции">Общие инструкции по
компиляции</a>. Понимание информации, помеченной как важная,
может впоследствии избавить вас от многих проблем.
</p>
</div>
<p>
Очень важно, чтобы Binutils был скомпилированным первым, потому что
и Glibc, и GCC выполняют различные тесты на доступных компоновщике
и ассемблере, чтобы определить, какие из их функций следует
включить.
</p>
<p>
В документации пакета Binutils рекомендуется выполнять сборку в
отдельном каталоге, создадим его:
</p>
<pre class="userinput"><kbd class="command">mkdir -v build
cd build</kbd></pre>
<div class="admon note">
<img alt="[Примечание]" src="../images/note.png" />
<h3>
Примечание
</h3>
<p>
Для того, чтобы значения SBU, перечисленные в остальной части
книги, были вам полезны, измерьте время, необходимое для сборки
этого пакета, начиная с настройки и заканчивая установкой. Чтобы
добиться этого, оберните команды сборки командой <span class=
"command"><strong>time</strong></span>: <strong class=
"userinput"><code>time { ../configure ... && make
&& make install; }</code></strong>.
</p>
</div>
<p>
Теперь подготовьте Binutils к компиляции:
</p>
<pre class="userinput"><kbd class=
"command">../configure --prefix=$LFS/tools \
--with-sysroot=$LFS \
--target=$LFS_TGT \
--disable-nls \
--enable-gprofng=no \
--disable-werror \
--enable-new-dtags \
--enable-default-hash-style=gnu</kbd></pre>
<div class="variablelist">
<p class="title">
<strong>Значение параметров настройки:</strong>
</p>
<dl class="variablelist">
<dt>
<span class="term"><em class=
"parameter"><code>--prefix=$LFS/tools</code></em></span>
</dt>
<dd>
<p>
Указывает сценарию configure подготовить к установке пакет
Binutils в каталог <code class="filename">$LFS/tools</code>.
</p>
</dd>
<dt>
<span class="term"><em class=
"parameter"><code>--with-sysroot=$LFS</code></em></span>
</dt>
<dd>
<p>
Для кросс-компляции указывает системе сборки искать в $LFS
библиотеки целевой системы, если необходимо.
</p>
</dd>
<dt>
<span class="term"><code class=
"envar">--target=$LFS_TGT</code></span>
</dt>
<dd>
<p>
Поскольку название машины в значении переменной <code class=
"envar">LFS_TGT</code> может отличаться от значения, которое
возвращает сценарий <span class=
"command"><strong>config.guess</strong></span>, этот аргумент
укажет сценарию <span class=
"command"><strong>configure</strong></span> как настроить
систему сборки пакета Binutils для создания
кросс-компоновщика.
</p>
</dd>
<dt>
<span class="term"><em class=
"parameter"><code>--disable-nls</code></em></span>
</dt>
<dd>
<p>
Этот параметр отключает интернационализацию, так как i18n не
требуется для временных инструментов.
</p>
</dd>
<dt>
<span class="term"><em class=
"parameter"><code>--enable-gprofng=no</code></em></span>
</dt>
<dd>
<p>
Этот параметр отключает сборку gprofng, который не нужен для
временного инструментария.
</p>
</dd>
<dt>
<span class="term"><em class=
"parameter"><code>--disable-werror</code></em></span>
</dt>
<dd>
<p>
Этот параметр предотвращает остановку сборки в случае
появления предупреждений от компилятора хоста.
</p>
</dd>
<dt>
<span class="term"><em class=
"parameter"><code>--enable-new-dtags</code></em></span>
</dt>
<dd>
<p>
Этот параметр заставляет компоновщик использовать тег
<span class="quote">«<span class=
"quote">runpath</span>»</span> для встраивания путей поиска
библиотек в исполняемые файлы и общие библиотеки вместо
традиционного тега <span class="quote">«<span class=
"quote">rpath</span>»</span>. Это упрощает отладку
динамически подключаемых исполняемых файлов и устраняет
потенциальные проблемы в наборах тестов некоторых пакетов.
</p>
</dd>
<dt>
<span class="term"><em class=
"parameter"><code>--enable-default-hash-style=gnu</code></em></span>
</dt>
<dd>
<p>
По умолчанию компоновщик генерирует как хеш-таблицу в стиле
GNU, так и классическую хеш-таблицу ELF для общих библиотек и
динамически связанных исполняемых файлов. Хеш-таблицы
необходимы только для динамического компоновщика,
выполняющего поиск символов. В LFS динамический компоновщик
(предоставляемый пакетом Glibc) всегда будет использовать
хеш-таблицу в стиле GNU, к которой запросы выполняются
быстрее. Так что классическая хеш-таблица ELF совершенно
бесполезна. Этот параметр указывает компоновщику по умолчанию
генерировать только хеш-таблицу в стиле GNU, поэтому мы можем
избежать траты времени на создание классической хеш-таблицы
ELF при сборке пакетов или не тратить дисковое пространство
для ее хранения.
</p>
</dd>
</dl>
</div>
<p>
Скомпилируйте пакет:
</p>
<pre class="userinput"><kbd class="command">make</kbd></pre>
<p>
Установите пакет:
</p>
<pre class="userinput"><kbd class="command">make install</kbd></pre>
</div>
<div class="content" lang="ru" xml:lang="ru">
<p>
Подробная информация об этом пакете находится в <a class="xref"
href="../chapter08/binutils.html#contents-binutils" title=
"8.20.2. Содержимое пакета Binutils">Раздел 8.20.2,
«Содержимое пакета Binutils.»</a>
</p>
</div>
</div>
<div class="navfooter">
<ul>
<li class="prev">
<a accesskey="p" href="introduction.html" title=
"Введение">Пред.</a>
<p>
Введение
</p>
</li>
<li class="next">
<a accesskey="n" href="gcc-pass1.html" title=
"GCC-14.2.0 - Проход 1">След.</a>
<p>
GCC-14.2.0 - Проход 1
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter05.html" title=
"Глава 5. Сборка кросс-тулчейна">Наверх</a>
</li>
<li class="home">
<a accesskey="h" href="../index.html" title=
"Линукс с нуля - Версия 12.2">Начало</a>
</li>
</ul>
</div>
</body>
</html>
|