⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glibc2-howto.txt

📁 linux-bible.rar linux-bible.rar
💻 TXT
📖 第 1 页 / 共 3 页
字号:
   修改目录下的 specs。在这档案中, 将 /lib/ld-linux.so.1 换成   /lib/ld-linux.so.2, 你也必需要移去档案中所有的 %{...:-lgmon} 表示式,   因为 glibc 不使用 gmon 函式库来做 profile。 你可以在 [20]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!" 的输出,那麽   安装就成功了。   5. 安装成主要函式库   这一节的内容是关於将 glibc2 安装成你的主要 C 函式库。 任何你编译的新程   式都将会连结到这一个函式库, 除非你用了特殊的编译选项来连结到其它的版本      假如你是用 RedHat 或 Debian 并且已下载相关的 rpm 或 deb 档, 请参阅   RedHat 或 Debian 的安装说明,你可以直接跳过这一节。   5.1 由原始码编译函式库   这一节解释如何由原始码编译 glibc 2 与附加套件。 如果你想要改变最佳化与   组态选项或使用额外的套件,那你就必须编译函式库。     需求       * 约 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 的机器上则约需要一个半小时。     解开原始码     你需要从 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 才能找到这些附加套件。     设定组态     在 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  编译     要编译与验证, 执行:    make make check5.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 -v5.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 -v5.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.1 改成   /lib/ld-linux.so.2, 并且要将所有的 %{...:-lgmon} 表示式删除, 因为   glibc 不使用 gmon 函式库来做 profiling。 你可以在 [21]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!" 的输出,   那麽表示已经安装成功。   6. 使用非主要的 C 函式库编译程式   有些时候你会想要使用不同的函式库来编译你的程式,这一节会解释如何达成这   个目的。 我会使用在前两节中所使用的目录与安装名称,记得要改变这些名称以   符合你的设定。   6.1 一个关於使用非主要 C 函式库的警告   在你开始编译任何会在开机时用到的程式之前, 假如程式是动态连结,并且是在   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-linuxglibc2/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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -