📄 047.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->Linux HowTo 中译版-->Glibc 2 HOWTO 中文版: 安装成主要 library</TITLE>
<META NAME="keywords" CONTENT=" Linux HowTo 中译版 Glibc 2 HOWTO 中文版: 安装成主要 library">
<META NAME="description" CONTENT=" - Linux HowTo 中译版 - Glibc 2 HOWTO 中文版: 安装成主要 library">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" bgcolor="#e0e0e0"><strong><A HREF="048.htm">后一页</A><BR>
<A HREF="046.htm">前一页</A><BR>
<A HREF="index.html">回目录</A><BR>
<A HREF="../../../../index.htm">回首页</A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">Glibc 2 HOWTO 中文版: 安装成主要 library</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
姓名:Eric Green,<br>
Email:thrytis@imaxx.net<br>
地址 :<br>
转摘 :http://member.netease.com/</p>
<BR>
<BR>
<hr SIZE="0">
<BR>
<p><br>
<br>
5. 安装成主要 library <br>
这一节的内容是关於将 glibc2 安装成你的主要 c library。任何你编译的新程式都将会连结到这一个
library,除非你用了特殊的编译选项来连结到其它的版本。 <br>
<br>
假如你是用 RedHat 或 Debian 并且已下载相关的 rpm 或 deb 档,请参阅
RedHat 或 Debian 的安装说明,你可以直接跳过这一节。 <br>
<br>
5.1. 由原始码编译 library <br>
这一节解释如何由原始码编译 glibc 2 与 add-on。如果你想要改变最佳化与组态选项或使用额外的
package,那你就必需编译 library。 <br>
<br>
5.1.1. 需求 <br>
<br>
约 150 MB 的磁碟空间 <br>
GNU make 3.75 <br>
gcc >= 2.7.2 (最好是 2.7.2.1) <br>
binutils 2.8.1 (假如是 alpha 你需要 snapshot) <br>
bash 2.0 <br>
autoconf 2.12 (假如你更动了 configure.in) <br>
texinfo 3.11 <br>
<br>
在一安装有 64MB 记忆体的 i586@133 机器上,编译完整的 library 与 add-on
大约需要三个小时。而在 i686@200 的机器上则约需要一个半小时。 <br>
<br>
5.1.2. 解开原始码 <br>
你需要从 archive 中解出原始码才能编译它,最好的方式是: <br>
<br>
tar xzf glibc-2.0.5.tar.gz <br>
cd glibc-2.0.5 <br>
cat ../glibc-2.0.5-2.0.5c.diff.gz | gzip -d | patch -p0 <br>
tar xzf ../glibc-linuxthreads-2.0.5.tar.gz <br>
tar xzf ../glibc-crypt-2.0.5.tar.gz <br>
tar xzf ../glibc-localedata-2.0.5.tar.gz <br>
<br>
<br>
这将会把 linuxthreads、 crypt 与 localedata 等目录放到 glibc-2.0.5
目录下,如此 configure 才能找到这些 add-on。 <br>
<br>
5.1.3. 设定组态 <br>
在 glibc-2.0.5 的目录底下,建立一个新的目录 compile,并且 cd 到 compile
底下,所也的工作都会在这个目录中完成,这会简化後续的清除工作。
(发展者似乎并未让 'make clean' 作得很好) <br>
<br>
mkdir compile <br>
cd compile <br>
<br>
<br>
<br>
执行 ../configure。要使用 add-on 你必需用 --enable-add-ons 来指定,例如
--enable-add-ons=linuxthreads,crypt,localedata。也许你也会想要指定安装的目录,要符合
linux 标准架构,指定为 --prefix=/usr。 (当在 linux 系统上 prefix 被设为
/usr, configure 知道要调整其它的路径,好将 libc.so 以及其它重要的
library 放到 /lib) 完整的 configure 命令如下: <br>
<br>
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr <br>
<br>
<br>
5.1.4. 编译 <br>
要编译与验证,执行: <br>
<br>
make <br>
make check <br>
<br>
<br>
<br>
5.2. 准备安装 <br>
无论是由原始码或是 binary,你现在必需移动某些档案来迎接新的
library。任何新编译的程式会被连结到 glibc,但是旧有静态连结的程式仍然倚靠著
libc 5,所以你不能只是覆盖掉旧有的版本。 <br>
<br>
<br>
建立一个新的目录来放置旧档案: <br>
mkdir -p /usr/i486-linuxlibc5/lib <br>
<br>
<br>
旧的标头档必需从 /usr/include 移开: <br>
mv /usr/include /usr/i486-linuxlibc5/include <br>
<br>
<br>
建立一个新的 include 目录,并且设定到其它 include 目录的连结: <br>
mkdir /usr/include <br>
<br>
ln -s /usr/src/linux/include/linux /usr/include/linux <br>
ln -s /usr/src/linux/include/asm /usr/include/asm <br>
ln -s /usr/X11R6/include/X11 /usr/include/X11 <br>
ln -s /usr/lib/g++-include /usr/include/g++ <br>
<br>
<br>
这些连结须要视你的系统而稍作调整。最少在 Slackware 中, g++
标头档案在 /usr/local/g++-include,而 Debian 却放在 /usr/include/g++,并且将
/usr/lib/g++-include 连结到 /usr/include/g++。在後者的情形,你也许会想要将原始的
g++ include 目录移回到 /usr/include。 <br>
回存所有额外的标头档与连结。某些非标准的函式库会将档案放至
/usr/include,或是在 /usr/include 放置一连结到它们的 include
目录下。这些档案与连结必须回存,如此才可以正确的使用这些额外的函式库。
<br>
将你的新 library 路径 (例如 /usr/i486-linuxlibc5/lib) 加入到 /etc/ld.so.conf
的顶端。你最好要有 ld.so 1.8.8 或是更新的版本,以避免在安装完
glibc 之後出现一些奇怪的讯息。 <br>
搬移或复制所有的旧 library 到新的目录。 <br>
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib <br>
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib <br>
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib <br>
<br>
<br>
假如你的 /usr 与 / 是在不同的 partition 上,那 libm.so.5 与 libc.so.5
应该用复制的而非搬,因为一些用来启动 linux 的程式会需要这两个
library,因此必须要位在 root partition。 <br>
将 /usr/lib/*.o 移到新的目录下。 <br>
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib <br>
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib <br>
<br>
<br>
在你的 library 移动後,更新 library cache。 <br>
ldconfig -v <br>
<br>
<br>
<br>
5.3. 由 binary package 安装 <br>
如果你是由一已预先编译好的 glibc binary,你必需: <br>
<br>
cd / <br>
gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf - <br>
gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf - <br>
ldconfig -v <br>
<br>
<br>
如果你用的是不同的系统架构或是版本,请置换适当的档名。 <br>
<br>
5.4. 由 source 安装 <br>
要由 source 安装,执行: <br>
<br>
make install <br>
ldconfig -v <br>
<br>
<br>
<br>
5.5. 更新 gcc specs <br>
安装的最後一步 (不管你是由 binary 或是由原始码安装) 是更新 gcc 的
spec 档,让你可以正确的连结你的程式。要知道 gcc 所用的是那一个
spec 档,如下输入: <br>
<br>
% gcc -v <br>
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs <br>
gcc version 2.7.2.2 <br>
<br>
<br>
<br>
在这里,系统是 i486-unknown-linux,而版本则是 2.7.2.2。你必须将
/usr/lib/gcc-lib/<system> 复制到旧的系统目录下: <br>
<br>
cd /usr/lib/gcc-lib/ <br>
cp -r i486-unknown-linux i486-linuxlibc5 <br>
<br>
<br>
<br>
到原先的目录与版本目录下: <br>
<br>
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2 <br>
<br>
<br>
<br>
并修改在同一目录下的 specs。将这档案中的 /lib/ld-linux.so.2 改成
/lib/ld-linux.so.1,并且要将所有的 %{...:-lgmon} 表示式删除,因为 glibc
不使用 gmon 函式库来做 profiling。你可以在 specs 档□例 找到一份 specs
档的□例。 <br>
<br>
5.6. 测试你的安装 <br>
要测试安装是否正确,请建立 glibc.c 如下: <br>
<br>
#include <stdio.h> <br>
<br>
main() <br>
{ <br>
printf("hello world!\n"); <br>
} <br>
<br>
<br>
并且 compile 这个程式: <br>
% gcc glibc.c -o glibc <br>
<br>
<br>
使用 ldd 来查证这个程式是连结到 glibc2 而非你的旧 libc: <br>
% ldd glibc <br>
libc.so.6 => /lib/libc.so.6 (0x4000e000) <br>
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) <br>
<br>
<br>
假如这个程式可以通过 compile 并且在执行後产生 ``hello world!''
的输出,那麽表示已经安装成功。 </p>
<BR>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" bgcolor="#e0e0e0"><strong><A HREF="048.htm">后一页</A><BR>
<A HREF="046.htm">前一页</A><BR>
<A HREF="index.html">回目录</A><BR>
<A HREF="../../../../index.htm">回首页</A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -