Linux下android模拟器无法启动,报GLIBC_2.11' not found错误的解决方案

    今日安装了XP与Linux双启动系统,jdk、eclipse、adt一路高歌,到了启动模拟器时卡了壳,报出`GLIBC_2.11' not found’等等错误信息,搜索谷歌百度,与我同样遭遇之难兄难弟不少,

    导致这个错误的原因是系统中的glibc库版本不够,谷歌编译SDK时用的glibc版本高了些,没有考虑到我等系统之情况,在使用 yum update命令更新了系统之后故障依旧。网上提供了解决方案,下载sdk源码重新编译,这样当然是可以的,可是过程晦涩难懂且容易出错,终于在网上找到一篇文章,轻松解决问题,向这位仁兄致敬!

    方案如下:

    1)下载 http://dl-ssl.google.com/android/repository/tools_r07-linux.zip

    2) 解压

    3)将解决后的文件替换SDK顶层目录下tools目录中的内容

 

 

<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、付费专栏及课程。

余额充值