如何免费制作网站?,深圳维特网站建设,济宁网站排名,东莞大朗网站设计一、关于gcc、glibc和binutils模块之间的关系 1、gcc#xff08;gnu collect compiler#xff09;是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”#xff0c;以及提供了与编译器紧密相关的运行库的支持#xff0c;如libgcc_s.so、libstdc.so等。 2、bi… 一、关于gcc、glibc和binutils模块之间的关系 1、gccgnu collect compiler是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”以及提供了与编译器紧密相关的运行库的支持如libgcc_s.so、libstdc.so等。 2、binutils提供了一系列用来创建、管理和维护二进制目标文件的工具程序如汇编as、连接ld、静态库归档ar、反汇编objdump、elf结构分析工具readelf、无效调试信息和符号的工具strip等。通常binutils与gcc是紧密相集成的没有binutils的话gcc是不能正常工作的。 3、glibc是gnu发布的libc库也即c运行库。glibc是linux系统中最底层的api应用程序开发接口几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外它本身也提供了许多其它一些必要功能服务的实现主要的如下 1string字符串处理2signal信号处理3dlfcn管理共享库的动态加载4direct文件目录操作5elf共享库的动态加载器也即interpreter6iconv不同字符集的编码转换7inetsocket接口的实现8intl国际化也即gettext的实现9io10linuxthreads11locale本地化12login虚拟终端设备的管理及系统的安全访问13malloc动态内存的分配与管理14nis15stdlib其它基本功能二、在现有系统上如何升级redhat9上实践的1、升级这些库时最好不要覆盖系统中缺省的因为这些库尤其是glibc库是系统中最核心的共享库和工具如果盲目覆盖很可能导致整个系统瘫痪因为一般更新glibc库时其它所有以来libc库的共享库都需要重新被编译一遍。因此为了调试某个程序进入glibc时最好把
glibc安装到/usr/local/lib
下。2、首先编译glibc库。注意最好令建立一个glibc-build的目录configure时加上--enable-add-onslinuxthreads选项。make install安装到/usr/local下。3、修改gcc的spec文件/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs更改ld-linux.so.2为/usr/local/lib下的新的共享库装载器。4、编译binutils库此时被编译出的程序会连接到/usr/local/lib下的新的libc库。注意在configure前需要设置ld缺省连接的路径LIBRARY_PATH/usr/local/lib:/lib:/usr/lib否则binutils会configure出错找不到libc中的一些符号。具体步骤如下
1export LIBRARY_PATH/usr/local/lib:/lib:/usr/lib2mkdir binutils-build cd binutils-build3../binutils-2.13.90.0.18/configure4make5make -C ld clean6make -C ld LIB_PATH/usr/lib:/lib:/usr/local/bin设置编译后的ld的缺省库搜索路径后面的比前面的优先级高7make install三、总结1、运行时动态库的装载依赖于ld-linux.so.6的实现它查找共享库的顺序如下 1ld-linux.so.6在可执行的目标文件中被指定可用readelf命令查看2ld-linux.so.6缺省在/usr/lib和lib中搜索当glibc安装到/usr/local下时它查找/usr/local/lib3LD_LIBRARY_PATH环境变量中所设定的路径4/etc/ld.so.conf或/usr/local/etc/ld.so.conf中所指定的路径由ldconfig生成二进制的ld.so.cache中2、编译时搜索库的路径顺序如下 1ld-linux.so.6由gcc的spec文件中所设定2gcc --print-search-dirs所打印出的路径主要是libgcc_s.so等库。可以通过GCC_EXEC_PREFIX来设定3LIBRARY_PATH环境变量中所设定的路径或编译的命令行中指定的-L/usr/local/lib 2binutils中的ld所设定的缺省搜索路径顺序编译binutils时指定。可以通过“ld --verbose | grep SEARCH”来查看3、二进制程序的搜索路径顺序为PATH环境变量中所设定。一般/usr/local/bin高于/usr/bin4、编译时的头文件的搜索路径顺序与library的查找顺序类似。一般/usr/local/include高于/usr/include