Linux编译不同版本glibc(转载)

摘要:
转载自:https://blog.csdn.net/qq_40827990/article/details/89295472方法步骤如下:http://ftp.gnu.org/gnu/glibc/从网站下载所需的glibc版本,解压缩下载的文件,并在此目录下创建一个内置文件夹,然后创建一个glibc-x。其他目录下的xx目录:1tar-zxvfglibc-2.23.tar.gz2cdglibc-2.2
转载自:https://blog.csdn.net/qq_40827990/article/details/89295472 方法步骤
  1. 在http://ftp.gnu.org/gnu/glibc/网站下载你需要的glibc版本
  2. 解压下载的文件,同时在本目录下创建一个bulid文件夹,在其他目录下建立一个glibc-x.xx目录:
    1 tar -zxvf glibc-2.23.tar.gz
    2 cd glibc-2.23
    3 mkdir build
  3. 进入build目录,然后输入下面的命令,文件的路径自己确定:  
    1 cd build
    2 CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error=maybe-uninitialized" 
    3 CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error=maybe-uninitialized" 
    4 ../configure --prefix=/home/sir/cc-sir/glibc/glibc-2.23/   
    5 $CONFIGURE_FLAGS   //注意,这段代码如果要编译x86环境的libc库,不需要执行。编译ARM64环境的需要先source环境变量,然后执行该句,            
    6 make
    7 make install
  4. 最后进行软链接就可以:
    1 sudo ln -s /home/sir/cc-sir/glibc-2.23/lib/ld-2.23.so 23-linux-x86-64.so.2

    然后检查/lib64目录可以看到新增加的libc:

    1 sir@sir-PC:~/desktop$ ls -l /lib64
    2 总用量 0
    3 lrwxrwxrwx 1 root root 42 4月  14 12:54 23-linux-x86-64.so.2 -> /home/sir/cc-sir/glibc-2.23/lib/ld-2.23.so
    4 lrwxrwxrwx 1 root root 42 4月  14 10:12 26-linux-x86-64.so.2 -> /home/sir/cc-sir/glibc-2.26/lib/ld-2.26.so
    5 lrwxrwxrwx 1 root root 32 11月  3 19:49 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.27.so

    如果编译的glibc版本太低,在make的时候可能会出现一些问题,可能需要自己根据报错的信息,修改源代码;

    报错例子
     1 nis_call.c: In function ‘nis_server_cache_add’:
     2 nis_call.c:682:6: error: suggest explicit braces to avoid ambiguous ‘else’ [-Werror=dangling-else]
     3    if (*loc != NULL)
     4       ^
     5 cc1: all warnings being treated as errors
     6 make[2]: *** [../o-iterator.mk:9:/home/sir/cc-sir/glibc-2.23/nis/nis_call.o] 错误 1
     7 make[2]: 离开目录“/home/sir/tools/glibc-2.23/nis”
     8 make[1]: *** [Makefile:214:nis/others] 错误 2
     9 make[1]: 离开目录“/home/sir/tools/glibc-2.2310 make: *** [Makefile:9:all] 错误 2

    nis_call.cer文件中第682行的if语句没有加‘{ }’,导致语义不明报错,自行补上{ }就可以;

     1 -o /home/sir/cc-sir/glibc-2.23/misc/regexp.os -MD -MP -MF /home/sir/cc-sir/glibc-2.23/misc/regexp.os.dt -MT /home/sir/cc-sir/glibc-2.23/misc/regexp.os
     2 /tmp/cc2dus00.s: Assembler messages:
     3 /tmp/cc2dus00.s: 错误:`loc1@GLIBC_2.2.5' can't be versioned to common symbol 'loc1'
     4 /tmp/cc2dus00.s: 错误:`loc2@GLIBC_2.2.5' can't be versioned to common symbol 'loc2'
     5 /tmp/cc2dus00.s: 错误:`locs@GLIBC_2.2.5' can't be versioned to common symbol 'locs'
     6 make[2]: *** [../o-iterator.mk:9:/home/sir/cc-sir/glibc-2.23/misc/regexp.os] 错误 1
     7 make[2]: 离开目录“/home/sir/tools/glibc-2.23/misc”
     8 make[1]: *** [Makefile:214:misc/subdir_lib] 错误 2
     9 make[1]: 离开目录“/home/sir/tools/glibc-2.2310 make: *** [Makefile:9:all] 错误 2

    将regexp.c源文件中的:

    1 char *loc1
    2 char *loc2
    3 char *locs

    修改为:

    char *loc1 __attribute__ ((nocommon));
    char *loc2 __attribute__ ((nocommon));
    char *locs __attribute__ ((nocommon));

    还有其他的报错都大同小异,修改一下源代码基本都可以解决…

免责声明:文章转载自《Linux编译不同版本glibc(转载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Typora之更换自己喜欢的换主题【带图操作详细步骤】Termux 高级终端安装使用配置教程[未成功]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Linux知识积累】 CentOS开启Kdump的方法

Linux内核崩溃转存机制kdump概念:当系统崩溃时,kdump 使用 kexec 启动到第二个内核,第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。继续学习:https://l...

『Linux学习笔记』7. 管道和过滤器 -- pipe

在Linux中, 管道(pipe)可以将一个命令的标准输出送往另一个命令的标准输入, 多个管道可以组成管道线(pipeline). 管道操作符 与重定向类似, 管道也拥有自己的操作符"|", 当多个命令使用"|"连接时, 就意味着它们位于同一管道中, 它们的标准输出与标准输入会依次相连. ls | less 上面这行代码中, ls所获取的当前目录内容将被传...

linux下memcached的安装

系统镜像及环境要求: 1) 适用于windows系列版本及开发者的相关教程  请参考本文1.0开始安装步骤 2)  Centos 6系列及Aliyun Linux 6系列以上版本 请参考本文2.0开始安装步骤 3)  Centos 5系列及Aliyun Linux 5系列版本,请参考本文3.0开始安装步骤 4)  Ubuntu Debian等系列版本,请...

青蛙学Linux—进程管理

进程,Process,是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stac...

安装qmake与环境变量解析

转自:http://www.kuqin.com/qtdocument/qmake-manual-2.html 安装qmake 当Qt被连编的时候,默认情况下qmake也会被连编。 这一部分解释如何手工连编qmake。如果你已经有了qmake,可以跳过这里,请看10分钟学会使用qmake。 手动安装qmake 在手工连编Qt之前,下面这些环境变量必须被设...

学习使用linux下tags文件

ctags可以分析程序生成tag文件为vim所用,从而在编写程序时实现函数原型、数据结构声明等快速跳转,很是方便。首先确定你的Linux 系统里安装了ctags。没有的话,请先安装ctags。如果是Debian或者Ubuntu系统,直接在终端上运行:sudo apt-get install ctags装好ctags后,找一个源码目录,在终端上运行如下命令,...