荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Rog (leang kei ka), 信区: Linux
标  题: [CLDP]GLIBC-HOWTO
发信站: BBS 荔园晨风站 (Sun Dec 13 20:19:14 1998), 站内信件

【 以下文字转载自 Rog 的信箱 】
【 原文由 rog.bbs@@IEESR-SUN.stu.edu.cn 所发表 】
发信人: linux (熊哥), 信区: Unix
标  题: [CLDP]GLIBC-HOWTO
发信站: 郁金香 BBS (Mon Oct 19 21:33:48 1998), 转信

x Juang, allex@ms2.accmail.com

   1.4 版, 1998年 1月 11日

     _________________________________________________________________

   这份 glibc 2 HOWTO 内容包括在 Linux 系统上安装与使用第二版 GNU C
   Library。
     _________________________________________________________________

  1. 简介


          1.1. 关於 glibc 2
          1.2. 关於这份文件
          1.3. 这份文件的最新改变

  2. 选择你的安装方式

  3. 取得函式库

  4. 安装成测试用的函式库


          4.1. 编译与安装
          4.2. 更新 dynamic loader
          4.3. Configuring for gcc.
          4.4. 更新标头档连结
          4.5. 测试你的安装

  5. 安装成主要函式库


          5.1. 由允悸氡嘁牒娇鉅
          5.2. 准备安装
          5.3. 由预先编译好的套件安装
          5.4. 由允悸氚沧盃
          5.5. 更新 gcc specs
          5.6. 测试你的安装

  6. 使用非主要 libc 编译程式


          6.1. 一个关於使用非主要 libc 的警告
          6.2. 用测试安装的 glibc 编译程式
          6.3. 当 glibc 是主要函式库时用 libc 5 编译程式

  7. 编译 C++ 程式


          7.1. 用测试的 C 函式库安装 libg++
          7.2. 在主要 glibc 下安装 libg++
          7.3. 使用非主要 libc 来编译 C++ 程式

  8. 报告臭□

  9. Specs 档□例

  10. 杂项


          10.1. 进一步的资料
          10.2. 贡献者列表
          10.3. 回馈
          10.4. Copyright.

   Glibc 2 HOWTO 中文版 : 简介
   Previous: Glibc 2 HOWTO 中文版
   Next: 选择你的安装方式
     _________________________________________________________________

1. 简介

  1.1. 关於 glibc 2

   Glibc 2 是 GNU C 函式库的最新版。 它目前不需修改就可以在 GNU Hurd,
   Linux i386, m68k, 以及 alpha 系统上执行, 而 2.1 版中将加入对 Linux
   PowerPC, MIPS, Sparc, Sparc 64 与 Arm 等系统的支援。
   未来将加入对其它架构及作业系统的支援。

   在 Linux 上, glibc 2 是主要版本为 6 的 libc, 也就是 Linux libc 5
   的後继者。 Linux libc 的发展人员想以此逐渐取代 libc 5。 就 2.0.6
   来看, glibc 已具有成熟产品的品质。 Glibc 2.1 版 (在不久的将来)
   将能够当作主流使用。

   Glibc 2 有三个选择性的附加套件:

   Crypt
          UFC-crypt 加密套件。 由於出口限制所以要分离出来。

   LinuxThreads
          Posix 1003.1c "pthread" 介面的实作。

   Locale data
          包含制造使用 glibc 的 internationalization 功能所需 locale
          资料档案的资料。

   强烈建议安装 Cryt 与 LinuxThreads 这两个附加套件, 如果不安装的话,
   有可能会与其它系统上的函式库造成不相容的情形。
   (假如你不想使用这两个附加套件的话, 那你必须在执行 configure 时加上
   --disable-sanity-checks 的选项)

  1.2. 关於这份文件

   这份文件焊侨绾卧跔Linux 系统上安装 glib 2, 适用对象是那些在
   intel-based 机器上使用 libc 5 的使用者。
   但是对於其它系统以及其它不同函式库 (如 glibc 1) 的使用者,
   只要将这份文件中出现的档名以及系统架构名称作适当的代换,
   应该也可得到些帮助。

   这份 HOWTO 最新版本的拷贝可在 Linux Documentation Project 或是
   http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html 找到。

  1.3. 这份文件的最新改变

   1.4 与 1.3 版的差别:
     * 将目前状态由实验性改成成熟产品。
     * 更新发展中的移植列表。
     * 更新最新版到 2.0.6。

   1.2 与 1.3 版的差别:
     * 加入建议使用附加套件的讯息。
     * 加入关於 glibc-linux 邮递列表的资讯。
     * 更新关於 RedHat 以 glibc 为底的 distribution 的讯息。
     * 更新 Debian glibc packages 的位置。
     * 加入 texinfo 版本相依。

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 简介
   Previous: Glibc 2 HOWTO 中文版
   Next: 选择你的安装方式 Glibc 2 HOWTO 中文版 : 选择你的安装方式
   Previous: 简介
   Next: 取得函式库
     _________________________________________________________________

2. 选择你的安装方式

   有许多种方式安装 glibc, 你可以安装成一个测试的函式库,
   将目前使用的函式库当作是内定的, 然後在 compile
   程式的时候用不同的选项来试用新的函式库。 用这种安装方式
   以後可以轻易的移除 glibc。 (虽然用 glibc 连结的程式在移除 glibc
   後都将不能使用) 另外, 用这种方式安装, 你必须由允悸胫匦卤嘁耄瑺并没有
   binary distribution 可以安装成测试的函式库。 这样的安装请参照
   安装成测试用的函式库。

   这份文件中所说的另一种方式则是将 glibc 安装成主要函式库。
   所有新编译的程式都将会使用 glibc,
   但是你也可以在编译时用不同的选项而将程式连结到旧的函式库。
   你可以直接安装已颈嘁牒玫陌姹荆瑺也可以自己编译函式库。
   假如想更改最佳化或是组态选项的话, 那你必需取得允悸氩⑶易约罕嘁耄瑺
   这个安装的过程请参照 安装成主要的 C 函式库

   Frodo Looijaard 描述了另一种 glibc 的安装方式。 他的方法是将 glibc
   安装成次要的函式库, 然後设定交叉编译器 (cross compiler) 来使用
   glibc。 这个方式比起这份文件中的测试安装要复杂的多,
   但是比较容易连结到 glibc。 这个方法在他的 Installing glibc-2 on Linux
   文件中说明。

   假如你现在使用的是 Debian 1.3, 但是不想为了 glibc
   而升级到不稳定的版本, 那麽 Debian libc5 to libc6 Mini-HOWTO
   会告诉你如何使用 Debian 的 package 来升级。

   假如你要把 glibc 2 安装到一重要的系统上,
   那你就不应该将它安装成主要的函式库。 使用测试的安装,
   或是在备用系统上试试看。 即使没有臭□,
   某些程式在编译之前仍然需要某些修改, 砸蛟陟赌承┖皆
   型与型态上的改变。

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 选择你的安装方式
   Previous: 简介
   Next: 取得函式库 Glibc 2 HOWTO 中文版 : 取得函式库
   Previous: 选择你的安装方式
   Next: 安装成测试用的函式库
     _________________________________________________________________

3. 取得函式库

   Glibc 2 包含 glibc package 以及数个附加套件: LinuxThreads、 Locale 与
   Crypt, 允悸朐跔
     * ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz
     * ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz
     * ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz
     * ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz

   2.0.5c 版要用一额外的 patch, 你可以在
   ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.5-2.0.5c.diff.gz 找到。

   你需要大约 150MB 的磁碟空间来作完全的编译与安装,
   核心函式库的基本安装大约要 50MB。

   2.0.6 并没有 binary 的 package, 2.0.4 的 binary package 只有 i386 及
   m68k 的版本, 而 2.0.1 for alpha 则可以在以下地方找到:
     * Intel x86:
          + ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz
          +
            ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.tar.g
            z
     * Alpha:
          +
            ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux.tar.
            gz
          +
            ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha-linu
            x.tar.gz
     * m68k:
          +
            ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.tar.g
            z
          +
            ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-linux.bin
            .tar.gz

   由於 cypt 这个附加套件有出口限制, 非美国使用者请到
   ftp://ftp.ifi.uio.no/pub/gnu 取得。

   如果你用的是 RedHat distribution, 那你可以从
   ftp://ftp.redhat.com/pub/redhat/ 取得 glibc2 的 rpm。 在 RedHat
   distribution 5.0 中, glibc 2 是主要的 c 函式库。

   如果你用的是 Debian distribution, 那你可以从
   ftp://ftp.debian.org/debian/dists/unstable/main/ 取得 glibc2 的
   package。 档名是 libc6。 Glibc 2 目前是 Debian 测试版的基本 package,
   等到 Debian 2.0 出来之後将会是主要的 c 函式库。

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 取得函式库
   Previous: 选择你的安装方式
   Next: 安装成测试用的函式库 Glibc 2 HOWTO 中文版 : 安装成测试用的函式库
   Previous: 取得函式库
   Next: 安装成主要函式库
     _________________________________________________________________

4. 安装成测试用的函式库

   这一节的内容是关於如何将 glibc 2 安装成测试用的函式库。
   所有编译的程式都连结到你目前的函式库,
   除非你给了某些额外的参数才会连结到新的函式库。
   由於路径被编译到某些档案中, 你需要由允悸肜窗沧罢夂娇狻

  4.1. 编译与安装

    4.1.1. 需求

     * 约 150 MB 的磁碟空间
     * GNU make 3.75
     * gcc >= 2.7.2 (最好是 2.7.2.1)
     * binutils 2.8.1 (假如是 alpha 你还需要 snapshot)
     * bash 2.0
     * autoconf 2.12 (假如你更动了 configure.in)
     * texinfo 3.11

   在一台安装有 64MB 记忆体 i586@133 的机器上, 编译完整的函式库
   (包括附加套件) 大约须要 3 小时。 而在 i686@200 则须约一个半小时。

    4.1.2. 解开允悸霠

   你必需由 archive 中取出允悸搿如此才能编译它, 最好的方式如下:

 tar xzf glibc-2.0.6.tar.gz
 cd glibc-2.0.6
 tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
 tar xzf ../glibc-crypt-2.0.6.tar.gz
 tar xzf ../glibc-localedata-2.0.6.tar.gz

   这会将 linuxthreads、 crypt 与 localedata 等目录放至 glibc-2.0.6
   的目录底下, 如此 configure 才可以找到这些 add-ons。

    4.1.3. 设定组态

   在 glibc-2.0.6 的目录底下, 建立一个新的目录 compile, 并且 cd 到
   compile 底下, 所有的工作都会在这个目录中完成,
   这会简化後续的清除工作。 (发展者似乎并未让 'make clean' 作得很好)

 mkdir compile
 cd compile

   执行 ../configure。 要使用附加套件, 你必需用 --enable-add-ons 指定,
   例如说 --enable-add-ons=linuxthreads,crypt,localedata。

   你也必需指定要安装的目录, /usr/i486-linuxglibc2 是个不错的选择,
   这样的 configure 命令如下:

 ../configure --enable-add-ons=linuxthreads,crypt,localedata
--prefix=/usr/i486
-linuxglibc2

    4.1.4. 编译与安装

   要编译与验证, 执行

 make
 make check

   假如 'make check' 成功了, 安装函式库:

 make install

  4.2. 更新 dynamic loader

    1. 建立连结, 从 ld.so 到 /lib/ld-linux.so.2:

 ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2

       当一个档案连结时, 这个函式库是唯一一个位置固定的。
       当稳定的版本出现的时候, 在 /lib 使用连结也会使得将 glibc
       升级为主要函式库时更为轻松。
    2. 修改 /etc/ld.so.conf。
       你需要增加新的函式库所在的路径到档案的最後, 这路径应该是
       <prefix>/lib。 假如用以上的选择就应该是
       /usr/i486-linuxglibc2/lib。 在你修改了 /etc/ld.so.conf 之後,
       执行:

 ldconfig -v

  4.3. Configuring for gcc.

   安装的最後一步是更新 /usr/lib/gcc-lib 以使 gcc
   知道如何使用新的函式库。 首先, 你需要复制目前的组态,
   要知道目前的组态, 使用 gcc 的 -v 选项:

 % gcc -v
 Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2

   这里, i486-unknown-linux 是目前所用的系统, 2.7.2.2 则是目前版本。
   你需要将 /usr/lib/gcc-lib/<系统> 复制到新的测试系统目录:

 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxglibc2

   到你的新系统目录以及版本目录下:

 cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2

   修改目录下的 specs。 在这档案中, 将 /lib/ld-linux.so.1 换成
   /lib/ld-linux.so.2, 你也必需要移去档案中所有的 %{...:-lgmon} 表示式,
   因为 glibc 不使用 gmon 函式库来做 profile。 你可以在 Specs
   档□例找到一个□例。

  4.4. 更新标头档连结

   你需要在你的 include 目录下建立连结到其它的 include 目录:

 cd /usr/i486-linuxglibc2/include
 ln -s /usr/src/linux/include/linux
 ln -s /usr/src/linux/include/asm
 ln -s /usr/X11R6/include/X11

   也许你有其它的函式库, 例如说 ncurse,
   而这些函式库会需要它们自己的标头档, 你应该从 /usr/include
   复制或连结这些档案。 (有些函式库需要重新用 glibc2 来 compile,
   在这种情形下, 只要编译并且安装到 /usr/i486-linuxglibc2)

  4.5. 测试你的安装

   要测试安装是否成功, 建立一档案 glibc.c 如下:

 #include <stdio.h>

 main()
 {
     printf("hello world!\n");
 }

   用 "-b <安装目录> -nostdinc -I<安装目录>/include
   -I/usr/lib/gcc-lib/<新系统目录>/<gcc 版本>/include" 的选项编译:

 % gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include
-I/usr/lib
/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc

   使用 ldd 确定程式是用 glibc2 连结, 而非旧有的 libc:

 % ldd glibc
 libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.5.so (0x4000d000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

   如果通过编译, 连结也确定, 并且执行时也产生 "hello world!" 的输出,
   那麽安装就成功了。

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 安装成测试用的函式库
   Previous: 取得函式库
   Next: 安装成主要函式库 Glibc 2 HOWTO 中文版 : 安装成主要函式库
   Previous: 安装成测试用的函式库
   Next: 使用非主要 libc 编译程式
     _________________________________________________________________

5. 安装成主要函式库

   这一节的内容是关於将 glibc2 安装成你的主要 c 函式库。
   任何你编译的新程式都将会连结到这一个函式库,
   除非你用了特殊的编译选项来连结到其它的版本。

   假如你是用 RedHat 或 Debian 并且已下载相关的 rpm 或 deb 档, 请参阅
   RedHat 或 Debian 的安装说明, 你可以直接跳过这一节。

  5.1. 由允悸氡嘁牒娇鉅

   这一节解释如何由允悸氡嘁霠glibc 2 与附加套件。
   如果你想要改变最佳化与组态选项或使用额外的套件,
   那你就必须编译函式库。

    5.1.1. 需求

     * 约 150 MB 的磁碟空间
     * GNU make 3.75
     * gcc >= 2.7.2 (最好是 2.7.2.1)
     * binutils 2.8.1 (假如是 alpha 你需要 snapshot)
     * bash 2.0
     * autoconf 2.12 (假如你更动了 configure.in)
     * texinfo 3.11

   在一安装有 64MB 记忆体的 i586@133 机器上,
   编译完整的函式库与附加套件大约需要三个小时。 而在 i686@200
   的机器上则约需要一个半小时。

    5.1.2. 解开允悸霠

   你需要从 archive 中解出允悸氩拍鼙嘁胨瑺最好的方式是:

 tar xzf glibc-2.0.6.tar.gz
 cd glibc-2.0.6
 tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
 tar xzf ../glibc-crypt-2.0.6.tar.gz
 tar xzf ../glibc-localedata-2.0.6.tar.gz

   这将会把 linuxthreads、 crypt 与 localedata 等目录放到 glibc-2.0.6
   目录下, 如此 configure 才能找到这些附加套件。

    5.1.3. 设定组态

   在 glibc-2.0.6 的目录底下, 建立一个新的目录 compile, 并且 cd 到
   compile 底下, 所也的工作都会在这个目录中完成,
   这会简化後续的清除工作。 (发展者似乎并未让 'make clean' 作得很好)

 mkdir compile
 cd compile

   执行 ../configure。 要使用附加套件你必需用 --enable-add-ons 来指定,
   例如 --enable-add-ons=linuxthreads,crypt,localedata。
   也许你也会想要指定安装的目录, 要符合 linux 标准架构, 指定为
   --prefix=/usr。 (当在 linux 系统上 prefix 被设为 /usr, configure
   知道要调整其它的路径, 好将 libc.so 以及其它重要的函式库放到 /lib)
   完整的 configure 命令如下:

 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr

    5.1.4. 编译

   要编译与验证, 执行:

 make
 make check

  5.2. 准备安装

   无论是由允悸氡嘁牖蚴窃は缺嘁牒玫陌姹荆瑺你现在必需移动某些档案来訝
   接新的函式库。 任何新编译的程式会被连结到 glibc,
   但是旧有静态连结的程式仍然倚靠著 libc 5,
   所以你不能只是覆盖掉旧有的版本。

    1. 建立一个新的目录来放置旧档案:

 mkdir -p /usr/i486-linuxlibc5/lib

    2. 旧的标头档必需从 /usr/include 移开:

 mv /usr/include /usr/i486-linuxlibc5/include

    3. 建立一个新的 include 目录, 并且设定到其它 include 目录的连结:

 mkdir /usr/include

 ln -s /usr/src/linux/include/linux /usr/include/linux
 ln -s /usr/src/linux/include/asm /usr/include/asm
 ln -s /usr/X11R6/include/X11 /usr/include/X11
 ln -s /usr/lib/g++-include /usr/include/g++

       这些连结须要视你的系统而稍作调整。 最少在 Slackware 中, g++
       标头档案在 /usr/local/g++-include, 而 Debian 却放在
       /usr/include/g++, 并且将 /usr/lib/g++-include 连结到
       /usr/include/g++。 在後者的情形, 你也许会想要将允嫉臓g++ include
       目录移回到 /usr/include。
    4. 回存所有额外的标头档与连结。 某些非标准的函式库会将档案放至
       /usr/include, 或是在 /usr/include 放置一连结到它们的 include
       目录下。 这些档案与连结必须回存,
       如此才可以正确的使用这些额外的函式库。
    5. 将你的新函式库路径 (例如 /usr/i486-linuxlibc5/lib) 加入到
       /etc/ld.so.conf 的顶端。 你最好要有 ld.so 1.8.8 或是更新的版本,
       以避免在安装完 glibc 之後出现一些奇怪的讯息。
    6. 搬移或复制所有的旧函式库到新的目录。

 mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
 mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
 cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
 cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib

       假如你的 /usr 与 / 是在不同的 partition 上, 那 libm.so.5 与
       libc.so.5 应该用复制的非搬移, 因为一些用来启动 linux
       的程式会需要这两个函式库, 因此必须要位在 root partition。
    7. 将 /usr/lib/*.o 移到新的目录下。

 mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
 mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
 mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
 mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib

    8. 在你的函式库移动後, 更新 library cache。

 ldconfig -v

  5.3. 由预先编译好的套件安装

   如果你是由一已预先编译好的 glibc 安装, 你必须:

 cd /
 gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
 gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
 ldconfig -v

   如果你用的是不同的系统架构或是版本, 请置换适当的档名。

  5.4. 由允悸氚沧盃

   要由允悸氚沧埃瑺执行:

 make install
 ldconfig -v

  5.5. 更新 gcc specs

   安装的最後一步 (不管你是由预先编译好的套件或是由允悸氚沧?) 是更新 gcc
   的 spec 档, 让你可以正确的连结你的程式。 要知道 gcc 所用的是那一个
   spec 档, 如下输入:

 % gcc -v
 reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2

   在这里, 系统是 i486-unknown-linux, 而版本则是 2.7.2.2。 你必须将
   /usr/lib/gcc-lib/<系统> 复制到旧的系统目录下:

 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxlibc5

   到韵鹊哪柯加氚姹灸柯枷拢籂

 cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2

   并修改在同一目录下的 specs。 将这档案中的 /lib/ld-linux.so.2 改成
   /lib/ld-linux.so.1, 并且要将所有的 %{...:-lgmon} 表示式删除, 因为
   glibc 不使用 gmon 函式库来做 profiling。 你可以在 specs 档□例
   找到一份 specs 档的□例。

  5.6. 测试你的安装

   要测试安装是否正确, 请建立 glibc.c 如下:

 #include <stdio.h>

 main()
 {
     printf("hello world!\n");
 }

   并且 compile 这个程式:

 % gcc glibc.c -o glibc

   使用 ldd 来查证这个程式是连结到 glibc2 而非你的旧 libc:

 % ldd glibc
 libc.so.6 => /lib/libc.so.6 (0x4000e000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

   假如这个程式可以通过 compile, 并且在执行後产生 "hello world!"
   的输出, 那麽表示已景沧俺晒Α

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 安装成主要函式库
   Previous: 安装成测试用的函式库
   Next: 使用非主要 libc 编译程式 Glibc 2 HOWTO 中文版 : 使用非主要 libc
   编译程式
   Previous: 安装成主要函式库
   Next: 编译 C++ 程式
     _________________________________________________________________

6. 使用非主要 libc 编译程式

   有些时候你会想要使用不同的函式库来编译你的程式,
   这一节会解释如何达成这个目的。
   我会使用在前两节中所使用的目录与安装名称,
   记得要改变这些名称以符合你的设定。

  6.1. 一个关於使用非主要 libc 的警告

   在你开始编译任何会在开机时用到的程式之前, 假如程式是动态连结,
   并且是在 non-root partition 被 mount 之前使用的话,
   那所有连结用的函式库都必须在 root partition 上。 在前面的安装程序里,
   我们将 glibc 安装成主要的函式库, 而旧的函式库仍然保留在 /lib, /lib
   会在 root partition 上, 也就是说,
   所有在开机时会用到的程式都能正常工作。 然而, 若你的 /usr 是在不同的
   partition 上, 且把 glibc 当成测试用的函式库, 安装在
   /usr/i486-linuxglibc2, 那除非 /usr 已颈粻mount, 否则所有你用 glibc
   编译的程式都将不能使用。

  6.2. 用测试安装的 glibc 编译程式

   要用测试安装的 glibc 编译程式, 你必须要将 include 录路径重设成 glibc
   的 include 路径。 指定 "-nostdinc" 会取消正常 include 路径, 而
   "-I/usr/i486-linuxglibc2/include" 则会指到 glibc 的 include 目录,
   你也必须要指定 gcc 标准 include 目录, 通常是
   /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include。
   (这里假设你安装测试的函式库在 i486-linuxglibc2, 而 gcc 的版本是
   2.7.2.2)

   要用测试安装的 glibc 来连结, 你必须指明 gcc 设定, 这是由 "-b
   i486-linuxglibc2" 这选项来达成。

   对大部份的程式, 你可以简单的将其加入 makefile 的 $CFLAGS 与 $LDFLAGS
   选项中:

 CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include
-I/usr/lib/gcc-lib/i486-lin
uxglibc2/2.7.2.2/include -b i486-linuxglibc2
 LDFLAGS = -b i486-linuxglibc2

   假如你使用 configure 这个 script, 在执行 configure 之前, 定义 shell
   变数 $CFLAGS 与 $LDFLAGS (在 csh/tcsh 下用 env/setenv 在
   sh/bash/其它之下用 set/export)。 这样产生的 makefile 应该会包含正确的
   $CFLAGS 与 $LDFLAGS。 不过并非所有的 configure scrpt
   都会去取得这些变数, 所以在执行完 configure 之後, 你还是要检查一下
   makefile, 假如需要的话, 手动修改它。

   假如你所要编译的程式只呼叫 gcc, (而不直接呼叫 cpp 或 binutils)
   你可以使用以下的 script, 省去每次指定所有选项的麻烦:

 #!/bin/bash
 /usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
              -I/usr/i486-linuxglibc2/include \
              -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"

   编译时你可以使用这个 script 而不是 gcc。

  6.3. 当 glibc 是主要函式库时用 libc 5 编译程式

   当你已窘珷glibc 安装成主要的函式库之後,
   又想用旧的函式库来编译程式的时候, 你必须将 include
   路径重设成旧的路径。 指定 "-nostdinc" 将会使预设的路径无效, 而
   "-I/usr/i486-linuxlibc5/include" 会将 include 的路径指到旧函式库的
   include 路径, 你也必须要指定
   "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" 以含入 gcc 所需的
   include 档。 注意要视你新的目录与 gcc 版本来调整这些路径。

   要用旧的 libc 来做连结, 你必须指定 gcc 所用的架构。 这是由 "-b
   i486-linuxlibc5" 这个选项所指定的。

   对大部份的程式, 你可以简单的将这些选项加入到 makefile 里的 $CFLAGS 与
   $LDFLAGS 选项里:

 CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include
-I/usr/lib/gcc-lib/i486-linu
xlibc5/2.7.2.2/include -b i486-linuxlibc5
 LDFLAGS = -b i486-linuxlibc5

   假如你使用 configure 这个 script, 在执行 configure 之前, 定义 shell
   变数 $CFLAGS 与 $LDFLAGS (在 csh/tcsh 下用 env/setenv 在
   sh/bash/或其它之下用 set/export)。 这样产生的 makefile
   应该会包含正确的 $CFLAGS 与 $LDFLAGS。 不过并非所有的 configure scrpt
   都会去取得这些变数, 所以在执行完 configure 之後, 你还是要简检查一下
   makefile, 假如需要的话, 手动修改它。

   假如你所要编译的程式只呼叫 gcc, (而不直接呼叫 cpp 或 binutils)
   你可以使用以下的 script, 省去每次指定所有选项的麻烦:

 #!/bin/bash
 /usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
              -I/usr/i486-linuxlibc5/include \
              -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"

   编译时你可以使用这个 script 而不是 gcc。

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 使用非主要 libc 编译程式
   Previous: 安装成主要函式库
   Next: 编译 C++ 程式 Glibc 2 HOWTO 中文版 : 编译 C++ 程式
   Previous: 使用非主要 libc 编译程式
   Next: 报告臭□
     _________________________________________________________________

7. 编译 C++ 程式

   因为 libg++ 使用了部份的数学函式库, 也就是说会连结到 libm。
   由於你目前的 libg++ 是用旧版的函式库所建立的, 所以你必须重新用 glibc
   来 compile libg++ 或是取得一份预先编译好的版本。 最新版的 libg++
   source 与用 glibc 所连结的预先编译版可以在
   ftp://ftp.yggdrasil.com/private/hjl/ 找到。

  7.1. 用测试的 C 函式库安装 libg++

   假如你已窘珷glibc 安装成测试用的函式库, 那你必须安装到 glibc
   所安装的目录下 (例如由前一节所示的 /usr/i486-linuxglibc2)。
   假如你要安装预先编译好的版本 (这也是我建议的安装方式,
   因为我一直都不能用这种方式成功地编译 libg++),
   你必须将档案解到暂存的目录下, 将 usr/lib/ 下的所有档案搬到 <install
   directory>/lib/, 并将 usr/include/ 下的所有档案搬到 <install
   directory>/include/ 下, (记得先删除 include/g++ 这个连结!) 再将
   usr/bin/ 下的档案搬到 <install directory>/bin/。

  7.2. 在主要 glibc 下安装 libg++

   若你已窘珷glibc 安装成主要的函式库, 假如还想要用旧的 libc 来编译 g++
   的程式, 那你必须先将旧的 libg++ 档案移至旧的 libc 的目录下。
   也许最简单的方式就是如前一节用 libc 5 来安装一份新版的拷贝,
   然後在正常安装 glibc 版。

  7.3. 使用非主要 libc 来编译 C++ 程式

   假如你想用非主要 libc 来编译 C++ 程式, 那你必须要 加入 g++ 的 include
   目录。 在上面的例子中, 对测试用的 glibc 是
   /usr/i486-linuxglibc2/include/g++, 而对主要 glibc 则是
   /usr/i486-linuxlibc5/include/g++, 这通常都可以由添加至 $CXXFLAGS
   这个变数来完成:

 CXXFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include
-I/usr/lib/gcc-lib/i486-l
inuxglibc2/2.7.2.2/include -I/usr/i486-linuxlibc5/include/g++ -b
i486-linuxglib
c2

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 编译 C++ 程式
   Previous: 使用非主要 libc 编译程式
   Next: 报告臭□ Glibc 2 HOWTO 中文版 : 报告臭□
   Previous: 编译 C++ 程式
   Next: Specs 档□例
     _________________________________________________________________

8. 报告臭□

   假如你以为这函式库有错, 请先阅读 FAQ, 也许已居腥擞龅焦飧鑫侍猓瑺
   并且也有了简单的解决方法。 另外, 你也应该查看 INSTALL 档中的
   "Recommended Tools to Install the GNU C Library" 一节,
   因为有些错误不在於 glibc 而是在於这些工具。

   假设你找到了□虫, 请先确定的确是臭□。 一个判断的好方法是看看 glibc
   的行为是否与其它的 c 函式库相同。 假如相同的话, 那也许你是错的,
   而函式库是正确的。 (但也不一定如此) 假如不相同的话,
   那肯定两者之中有一个是错的。

   接著, 请到 http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl,
   并且查看臭□资料库, 确定这个问题尚未有人提出。 你也应该看看 BUGS
   (内付於 libc 中) 所列出的目前已被发现的臭□。

   一旦你确定找到了一只新的臭□, 请试著将它缩小到最小的 test case。 就 C
   函式库而言, 你只需要将它缩小到单独一个函式呼叫 (假如可以的话)。
   这应该不是太困难的事。

   最後一个步骤是就你的 test case 提出臭□报告。 要送出臭□报告,
   请包含你的 test case、 你所得到的结果、 你所期待的结果、
   你认为可能的砸蛟谀菭(只要你曾想过的任何砸?)、 你的系统类别、
   你所使用的 GNU C 函式库、 GNU CC 编译器、 GNU binutils 的版本。 另外,
   请附上执行 configure 时产生的 config.status 与 config.make,
   这两个档案会在你执行 configure 时候的目录下。

   所有的臭□报告都应该使用 glibcbug 这个 GNU libc 所附的 shell script
   送至 bugs@gnu.org (旧的位址 bugs@gnu.ai.mit.edu 也仍然可以使用)。
   或是到 GNATS 网站上利用
   http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl 这个介面来做。

   你的建议与问题应该送到 bugs-glibc@prep.ai.mit.edu 这个邮递列表。
   假如你没有阅读新闻群组 gnu.bug.glibc, 那麽你可以要求
   bug-glibc-request@prep.ai.mit.edu 加入这个列表。

   请不要将 GNU C 函式库的臭□报告送到 <bug-gcc@prep.ai.mit.edu>,
   这是为了 GNU CC 而设立的, 而 GNU CC 与 GNU C
   函式库是由不同人们的所维护的。

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 报告臭□
   Previous: 编译 C++ 程式
   Next: Specs 档□例 Glibc 2 HOWTO 中文版 : Specs 档□例
   Previous: 报告臭□
   Next: 杂项
     _________________________________________________________________

9. Specs 档□例

   这里是一份 specs 的□例 这将使 gcc 用 glibc2 来编译与连结。 它应该位於
   /usr/lib/gcc-lib/<新系统目录>/<gcc 版本>. 假如你用的是 x86 的系统,
   那你也许可以直接将这一段复制到档案里去。

 *asm:
 %{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}

 *asm_final:
 %{pipe:-}

 *cpp:
 %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__}
%{
posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}

 *cc1:
 %{profile:-p}

 *cc1plus:


 *endfile:
 %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s

 *link:
 -m elf_i386 %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:
%{rdynamic:-export-dynamic}     %{!dynamic-linker:-dynamic-linker
/lib/ld-linux
.so.2}}         %{static:-static}}}

 *lib:
 %{!shared: %{pthread:-lpthread}        %{profile:-lc_p} %{!profile: -lc}}

 *libgcc:
 -lgcc

 *startfile:
 %{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s}
%{!p:%{p
rofile:gcrt1.o%s}                        %{!profile:crt1.o%s}}}}    crti.o%s
%{
!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}

 *switches_need_spaces:


 *signed_char:
 %{funsigned-char:-D__CHAR_UNSIGNED__}

 *predefines:
 -D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386)
-Am
achine(i386)

 *cross_compile:
 0

 *multilib:
 . ;

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : Specs 档□例
   Previous: 报告臭□
   Next: 杂项 Glibc 2 HOWTO 中文版 : 杂项
   Previous: Specs 档□例
   Next: Glibc 2 HOWTO 中文版
     _________________________________________________________________

10. 杂项

  10.1. 进一步的资料

    10.1.1. 相关网页

     * FSF's GNU C Library Home Page
     * Using GNU Libc 2 with Linux
     * Installing glibc-2 on Linux.
     * Debian libc5 to libc6 Mini-HOWTO.

    10.1.2. 新闻群组

     * comp.os.linux.development.system
     * comp.os.linux.development.apps
     * linux.dev.kernel
     * gnu.bugs.glibc

    10.1.3. 邮递列表

   Glibc 2 Linux 讨论列表
          这个邮递列表是为了让安装有 glibc, 也就是新的 GNU C 函式库,
          的使用者讨论用的。 议题包括相容性的问题, 以及在 linux/glibc
          环境下程式的编译问题。 要订阅这个邮递列表, 请寄一封信至
          Majordomo@ricardo.ecn.wfu.edu, 信的内容为 "subscribe
          glibc-linux <your email address>"。

  10.2. 贡献者列表

   大部份的资讯都是由 GNU Libc web page 以及 Ulrich Drepper's
   <drepper@gnu.ai.mit.edu> glibc 2 announcement 所偷来的, Andreas
   Jaeger <aj@arthur.rhein-neckar.de> 则提供了部份的 Bug report。

   以下各位都曾对本文件提供相关资讯以及意见:
     * Allex Juang<allex@ms2.accmail.com.tw>
     * Mark Brown <M.A.Brown-4@sms.ed.ac.uk>
     * Ulrich Drepper <drepper@gnu.ai.mit.edu>
     * Scott K. Ellis <ellis@valueweb.net>
     * Aron Griffis <agriffis@coat.com>
     * Andreas Jaeger <aj@arthur.rhein-neckar.de>
     * Frodo Looijaard <frodol@dds.nl>
     * Ryan McGuire <rmcguire@freenet.columbus.oh.us>
     * Shaya Potter <spotter@capaccess.org>
     * Les Schaffer <godzilla@futuris.net>
     * Andy Sewell <puck@pookhill.demon.co.uk>
     * Gary Shea <shea@gtsdesign.com>
     * Stephane <sr@adb.fr>
     * Jan Vandenbos <jan@imaxx.net>

   这份文件的芬胧怯梢韵率怂瓿傻模籂
     * 中文: Allex Juang<allex@ms2.accmail.com.tw>
     * 法文: Olivier Tharan <tharan@int-evry.fr>
     * 日文: Kazuyuki Okamoto <ikko-@pacific.rim.or.jp>

  10.3. 回馈

   除了撰写这份 HOWTO、 维护 glibc 2 for Linux 这网页、
   并且在我的机器上使用之外, 我与 glibc 计划完全无关,
   我也不了解这方面的议题, 但会尽可能的对寄给我的问题提供帮助。
   我也很欢幽闾岢鋈魏蔚幕乩 修正、 或是建议, 请将它们寄到
   thrytis@imaxx.net。

  10.4. Copyright.

   Copyright (c) 1997 by Eric Green. This document may be distributed
   under the terms set forth in the LDP license.

     _________________________________________________________________

   Glibc 2 HOWTO 中文版 : 杂项
   Previous: Specs 档□例
   Next: Glibc 2 HOWTO 中文版

--

████████████████████
█ 曼桢有这么个脾气,一样东西一旦属于她█
█ 了, 她总是越看越好,以为它是世界上最█
█ 好的,...他知道,因为他曾经是属于她的█
████████████████████

※ 来源:.郁金香 BBS bbs.stu.edu.cn.[FROM: energy-lx.stu.ed]
--
※ 转寄:.郁金香 BBS bbs.stu.edu.cn.[FROM: 202.96.151.222]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.141]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店