BBS水木清华站∶精华区

发信人: dfbb (赵无忌), 信区: Linux 
标  题: [文档]glibc howto中文版 
发信站: BBS 水木清华站 (Sun Feb  8 14:11:04 1998) 
 
x Juang, [email protected] 
 
   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 
   送至 [email protected] (旧的位址 [email protected] 也仍然可以使用)。 
   或是到 GNATS 网站上利用 
   http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl 这个介面来做。 
    
   你的建议与问题应该送到 bugs-[email protected] 这个邮递列表。 
   假如你没有阅读新闻群组 gnu.bug.glibc, 那麽你可以要求 
   bug-glibc-[email protected] 加入这个列表。 
    
   请不要将 GNU C 函式库的臭□报告送到 <bug-[email protected]>, 
   这是为了 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 
          环境下程式的编译问题。 要订阅这个邮递列表, 请寄一封信至 
          [email protected] 信的内容为 "subscribe 
          glibc-linux <your email address>"。 
           
  10.2. 贡献者列表 
   
   大部份的资讯都是由 GNU Libc web page 以及 Ulrich Drepper's 
   <[email protected]> glibc 2 announcement 所偷来的, Andreas 
   Jaeger <[email protected]> 则提供了部份的 Bug report。 
    
   以下各位都曾对本文件提供相关资讯以及意见: 
     * Allex Juang<[email protected]> 
     * Mark Brown <M.A.Brown-[email protected]> 
     * Ulrich Drepper <[email protected]> 
     * Scott K. Ellis <[email protected]> 
     * Aron Griffis <[email protected]> 
     * Andreas Jaeger <[email protected]> 
     * Frodo Looijaard <[email protected]> 
     * Ryan McGuire <[email protected]> 
     * Shaya Potter <[email protected]> 
     * Les Schaffer <[email protected]> 
     * Andy Sewell <[email protected]> 
     * Gary Shea <[email protected]> 
     * Stephane <[email protected]> 
     * Jan Vandenbos <[email protected]> 
        
   这份文件的芬胧怯梢韵率怂瓿傻模� 
     * 中文: Allex Juang<[email protected]> 
     * 法文: Olivier Tharan <[email protected]> 
     * 日文: Kazuyuki Okamoto <ikko-@pacific.rim.or.jp> 
        
  10.3. 回馈 
   
   除了撰写这份 HOWTO、 维护 glibc 2 for Linux 这网页、 
   并且在我的机器上使用之外, 我与 glibc 计划完全无关, 
   我也不了解这方面的议题, 但会尽可能的对寄给我的问题提供帮助。 
   我也很欢幽闾岢鋈魏蔚幕乩 � 修正、 或是建议, 请将它们寄到 
   [email protected] 
    
  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 中文版 
 
-- 

 
 
 
=============================================================== 
ID: dfbb                 NICKNAME:赵无忌     REALNAME:方汉 
---------------------------------------------------------------- 
爱好:Linux, PC            Email: [email protected] 
     武侠,古文   Clinux Homepage:http://csun01.ihep.ac.cn/linux/ 
================================================================ 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: ie0.ie.ac.cn] 

BBS水木清华站∶精华区