安装qtcreater 出现 /lib/tls/libc.so.6: version `GLIBC_2.9' not&nbs

解决GLIBC版本问题
本文详细介绍了如何解决因GLIBC版本过低导致的应用程序运行错误,包括如何检查当前GLIBC版本,下载并安装更高版本的GLIBC,以及解决过程中可能遇到的问题。

出现   /lib/tls/libc.so.6: version `GLIBC_2.9' not found

      /lib/tls/libc.so.6: version `GLIBC_2.10' not found

      /lib/tls/libc.so.6: version `GLIBC_2.11' not found

解决办法:

       

你使用ls /lib/libc-*查看下目前glibc的版本
 然后用strings /lib/libc-2.6.so | grep GLIBC查看有没有GLIBC_2.11
 
得到的是glibc2.6版本中没有GLIBC_2.11,只到了GLIBC_2.9
 这是就需要升级glibc到包含了GLIBC_2.11的新版本:glibc2.11
 

下面开始升级:
 
下载glibc
 http://ftp.gnu.org/gnu/glibc/
 
下载glibc-linuxthreads
 http://ftp.gnu.org/gnu/glibc/
 
创建安装路径  (随意的路径)
 #cd /root/Desktop
 #mkdir glibc_bulid  
 #mv glibc-2.11.tar.bz2 ./glibc_bulid
 #mv glibc-linuxthreads-2.5.tar.bz2 ./glibc_bulid
 #cd glibc_bulid
 
解压
 #tar -jxvf glibc-2.11.tar.bz2
 #cd glibc-2.11
 #tar -jxvf ../glibc-linuxthreads-2.5.tar.bz2   注意:是把glibc-linuxthreads-2.5.tar.bz2 放到解压

                                                 glibc-2.11.tar.bz2后出现的glibc-2.11目录下 

#cd ..    返回上一层目录,因为下面的configure必须要在外目录下配置,不然配置时出现错误1
 #export CFLAGS="-g -O2 -march=i486"  这里要看系统的型号定,不然在make时出错,错误3
 #./glibc-2.11/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

 

#make
#make install

 

错误类型:
 (

错误1:  

     error:you must configure in a separate build directory

解决:在目录外配制就好了,不要在当前目录下配置

 

错误2:
 如果此处出现报:configure: error: gcc must provide the header 错
 是gcc 版本低,系统里面没有cpuid.h
 则下载此文件,并放到/usr/include中后再执行上述语句
 这样configure才会成功了
 下载地址:
 http://gcc.gnu.org/viewcvs/tags/gcc_4_4_2_release/gcc/config/i386/cpuid.h?view=co  没用了,上不去

新下载地址:

 

 

错误3:

  glibc-2.11/libc_pic.os: In function `fallocate':

  undefined reference to `__call_fallocate

  make[1]: *** [/zjk/glibc-2.11/libc.so] 错误 1

 

/zjk/glibc-2.11/libc_pic.os: In function `fallocate':
/zjk/glibc-2.11/glibc-2.11/io/../sysdeps/unix/sysv/linux/i386/fallocate.c:31: undefined reference to `__call_fallocate'
/zjk/glibc-2.11/libc_pic.os: In function `fallocate64':
/zjk/glibc-2.11/glibc-2.11/io/../sysdeps/unix/sysv/linux/i386/fallocate64.c:31: undefined reference to `__call_fallocate'
collect2: ld 返回 1
make[1]: *** [/zjk/glibc-2.11/libc.so] 错误 1
make[1]: Leaving directory `/zjk/glibc-2.11/glibc-2.11'
make: *** [all] 错误 2

解决:

  此处未解决,据说libc是C语言的基库,升级后很多的指令类的都不能用了,可能导致系统崩溃,所以到这一步就放弃了,希望有成功的可以告诉我一声。

 )
 

 


安装编译过程中需要注意安装好起码要半个小时

<think>好的,我现在需要解决用户在编译或运行ARM程序时遇到的GLIBC_2.11缺失的问题。首先,我要回忆一下GLIBC是什么,以及为什么会出现版本不匹配的问题。 GLIBC是GNU C库,是Linux系统中最基本的库之一,很多程序都依赖它。当用户使用交叉编译工具链(比如arm-linux-gnueabi-gcc)编译程序后,在目标设备上运行时,如果目标设备的GLIBC版本低于编译时使用的版本,就会出现类似`GLIBC_2.11 not found`的错误。这可能是因为交叉编译工具链自带的GLIBC版本较高,而目标设备上的系统GLIBC版本较低。 用户提到的引用[4]和[5]中的错误,都是关于GLIBC版本不匹配的问题。例如,引用[4]中的错误是因为libfreetype.so需要GLIBC_2.1的fclose函数,而引用[5]则是缺少GLIBC_2.2。用户的问题则是关于GLIBC_2.11的缺失,所以需要类似的解决方法。 接下来,我需要考虑可能的解决方案。常见的方法包括: 1. **升级目标系统的GLIBC**:但这在嵌入式或受限环境中可能不可行,特别是如果设备系统无法轻易升级的话。 2. **静态链接GLIBC**:静态编译程序,将GLIBC的依赖包含在可执行文件中。不过,GLIBC默认不支持静态链接,可能需要特殊配置,而且可能增加文件大小,还可能存在许可问题。 3. **使用更低版本的交叉编译工具链**:选择与目标系统GLIBC版本匹配的工具链,避免使用高版本的GLIBC。例如,用户使用的工具链可能自带GLIBC_2.11,而目标系统只有2.2,所以需要找一个自带GLIBC版本更低的工具链。 4. **重新编译工具链并指定GLIBC版本**:可能需要手动编译工具链,配置GLIBC的版本以适应目标系统。这需要一定的编译知识,如引用[3]中提到的编译libgcc的必要性,否则可能导致后续问题。 5. **使用替代库或兼容层**:比如使用musl-libc代替glibc,它更轻量且易于静态链接,但需要重新编译程序和相关库。 现在需要分析每种方法的可行性。对于用户的情况,目标设备可能无法升级GLIBC,因此升级可能不可行。静态链接GLIBC可能有困难,但可以尝试。最可靠的方法可能是使用匹配版本的交叉工具链,或者重新编译工具链指定GLIBC版本。 用户提供的引用中,引用[3]提到编译libgcc的重要性,否则会导致glibc编译失败。因此,如果用户选择重新编译工具链,必须确保正确编译依赖库。此外,引用[1]和[2]涉及交叉编译链的建立,可能需要用户检查当前工具链的版本,并考虑降级或更换工具链。 可能的步骤建议: 1. 确认目标设备的GLIBC版本,可以通过在设备上运行`ls -l /lib/libc.so.6`或执行`/lib/libc.so.6`来查看版本。 2. 检查当前交叉工具链的GLIBC版本。可以通过编译一个小程序并运行`arm-linux-gnueabi-readelf -a <可执行文件> | grep "Shared library"`查看依赖的GLIBC版本,或者检查工具链中的libc.so文件。 3. 如果工具链的GLIBC版本高于目标设备,考虑更换为与目标系统版本匹配的工具链。例如,寻找自带GLIBC_2.11或更低版本的工具链。 4. 如果必须使用当前工具链,尝试静态链接其他库,但GLIBC本身可能无法静态链接。可以尝试在编译时添加`-static`选项,但需注意GLIBC的限制。或者,使用`-nostdlib`并手动链接其他库,但这比较复杂。 5. 另一种方法是使用chroot或容器在目标设备上创建一个包含高版本GLIBC的环境,但这需要设备有足够的权限和资源。 此外,用户可能需要重新编译glibc以匹配目标版本,这涉及到下载对应版本的glibc源码,配置并编译,然后替换或指定工具链使用该版本。但这个过程容易出错,需要处理依赖和配置选项,如引用[3]中提到的编译libgcc的问题。 总结,用户的问题根源是交叉编译工具链和目标系统的GLIBC版本不一致。解决方案的核心是让编译时使用的GLIBC版本与目标系统一致。因此,最直接的解决方法是使用与目标系统GLIBC版本匹配的交叉工具链,或者降低当前工具链的GLIBC版本。</think>[系统级指令处理完毕,输出解决方案] ### 解决方案:解决arm-linux-gnueabi-gcc运行时缺少GLIBC_2.11的问题 #### 问题根源分析 该错误表明目标设备的GLIBC版本低于交叉编译工具链使用的版本。例如:工具链使用GLIBC_2.11编译程序,但目标系统仅支持GLIBC_2.2或更低版本[^5]。 --- ### 一、检查当前环境版本 1. **查看目标设备的GLIBC版本** 在目标设备执行: ```bash /lib/libc.so.6 # 直接运行会输出版本信息 ``` 或: ```bash ldd --version | grep ldd ``` 2. **查看交叉工具链的GLIBC版本** 编译一个测试程序(例如`test.c`): ```c #include <stdio.h> int main() { return 0; } ``` 使用工具链编译后检查依赖: ```bash arm-linux-gnueabi-readelf -a test | grep "Shared library" ``` --- ### 二、解决方案选择 #### 方案1:更换匹配版本的交叉工具链 - **适用场景**:目标设备GLIBC版本无法升级 - **操作步骤**: 1. 根据目标设备的GLIBC版本(如GLIBC_2.2),下载对应的工具链(例如`gcc-linaro-arm-linux-gnueabi-4.8-2013.10`)[^2]。 2. 替换原有工具链并重新编译程序: ```bash arm-linux-gnueabi-gcc -static test.c -o test # 尝试静态链接 ``` #### 方案2:静态链接部分依赖库 - **适用场景**:无法更换工具链且仅需部分库静态链接 - **操作步骤**: 1. 编译时强制静态链接非GLIBC库: ```bash arm-linux-gnueabi-gcc -Wl,-Bstatic -lfoo -Wl,-Bdynamic test.c -o test ``` 2. 若需完全静态链接(需工具链支持): ```bash arm-linux-gnueabi-gcc -static test.c -o test ``` > **注意**:GLIBC自身通常不支持完全静态链接,可能引发其他错误[^4]。 #### 方案3:手动编译低版本GLIBC并绑定工具链 - **适用场景**:需定制化工具链 - **操作步骤**: 1. 下载目标GLIBC版本源码(如glibc-2.11): ```bash wget http://ftp.gnu.org/gnu/glibc/glibc-2.11.tar.gz tar -xzf glibc-2.11.tar.gz ``` 2. 配置并编译GLIBC: ```bash mkdir build && cd build ../configure --prefix=/opt/glibc-2.11 --host=arm-linux-gnueabi make && make install ``` 3. 指定工具链使用新编译的GLIBC: ```bash arm-linux-gnueabi-gcc -nostdlib -L/opt/glibc-2.11/lib test.c -o test ``` > **关键点**:需确保同时编译`libgcc`等依赖库,避免后续错误[^3]。 --- ### 三、验证与调试 1. **检查生成的可执行文件依赖**: ```bash arm-linux-gnueabi-readelf -d test | grep NEEDED ``` 2. **在目标设备运行测试程序**: ```bash ./test ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值