今天早上本来打算研究一下dup2函数的实现,以验证文件描述符相关的模型,但是通过gdb调试起来后发现跳转到了“/sysdeps/unix/syscall-template.S”文件,很明显这是系统调用的模板文件,之前咱们研究过的fork函数还有一定的特殊性(是通过ARCH_FORK宏跳转到系统调用),所以今天就把glibc编译安装一下,尝尝咸淡。
1. ./configure
一般这类软件的安装,都是三步骤
好,先来进行第一步,直接执行“./configure”,结果出现以下错误:
configure: error: you must configure in a separate build directory
mkdir glibc-2.21-build mkdir glibc-2.21-install cd glibc-2.21-build ../glibc-2.21/configure --prefix=../glibc-2.21-install结果又出现如下错误:
configure: error: expected an absolute directory name for --prefix: ../glibc-2.21-install
*** These critical programs are missing or too old: gawk *** Check the INSTALL file for required versions.
*** These auxiliary programs are missing or incompatible versions: makeinfo *** some features will be disabled. *** Check the INSTALL file for required versions. checking LD_LIBRARY_PATH variable... contains current directory configure: error: *** LD_LIBRARY_PATH shouldn't contain the current directory when *** building glibc. Please change the environment variable *** and run configure again.
再来看第二个问题,这里比较尴尬,错误提示是LD_LIBRARY_PATH包含有当前文件夹。但我的qt是安装在home文件夹下的,所以解决这个问题当前有两套方案,第一是把LD_LIBRARY_PATH临时设为空;第二种方案是先把LD_LIBRARY_PATH永久设为空,安装完毕后再改回来。
先来试试第一种方案,命令如下:
export LD_LIBRARY_PATH=
2. 执行make
这一步没什么说的,直接执行make就行了,不过执行时间比较长。
就出现了一个错误,可能连错误都不算:
*** errlist.c count 134 inflated to GLIBC_2.12 count 135 (old errno.h?)
3. 执行make install
以为执行到了这一步,幸福和快乐就应该是结局了,结果出现以下错误:
make[2]: *** No rule to make target 'libc.texinfo', needed by '/home/andywang/glibc-2.21-build/manual/libc.info'. Stop. make[1]: *** [manual/subdir_install] Error 2 make: *** [install] Error 2
make all还是出现上述警告,不过我看了一下,这部分是在装manual。其他需要的/bin、/include、/lib应该是都装好了(不过我也不确定)。
好,安装glibc的过程就先给大家分享到这里。