【我的Android进阶之旅】解决SDK升级到27.0.3遇到的GLIBC_2.14 not found、no acceptable C compiler found in $PATH等问题...
一、问题一:Failed to find Build Tools revision 27.0.3
1.1、问题描述
最近公司的Android项目都要进行SDK升级,目前在本地编译的时候将SDK升级到了27.0.3,本地运行正常,然后在jenkins服务器上跑的时候就会出现异常。异常如下所示:
[Gradle] - Launching build.
[AP_Develop] $ /opt/gradle/gradle-2.14.1/bin/gradle clean lintForXTC --stacktrace build --stacktrace findbugs --stacktrace
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Failed to download any source lists!
java.net.ConnectException: Connection timed out (Connection timed out)FAILURE: Build failed with an exception.* What went wrong:
A problem occurred configuring project ':SecureUnisignon'.
> Failed to find Build Tools revision 27.0.3* Try:
Run with --info or --debug option to get more log output.* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':SecureUnisignon'.at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:79)at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:74)at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61)at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:540)at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:93)at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:124)at org.gradle.internal.Factories$1.create(Factories.java:22)at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:121)at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:239)at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:212)at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:205)at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)at org.gradle.launcher.Main.doAction(Main.java:33)at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: java.lang.IllegalStateException: Failed to find Build Tools revision 27.0.3at com.android.builder.sdk.DefaultSdkLoader.installBuildTools(DefaultSdkLoader.java:286)at com.android.builder.sdk.DefaultSdkLoader.getTargetInfo(DefaultSdkLoader.java:145)at com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:136)at com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.java:760)at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:657)at com.android.build.gradle.BasePlugin$10.call(BasePlugin.java:608)at com.android.build.gradle.BasePlugin$10.call(BasePlugin.java:605)at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:156)at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:120)at com.android.build.gradle.BasePlugin.lambda$createTasks$1(BasePlugin.java:603)at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)at com.sun.proxy.$Proxy11.afterEvaluate(Unknown Source)at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)... 41 moreBUILD FAILED
1.2、问题分析与解决
如上图日志所示,Caused by: java.lang.IllegalStateException: Failed to find Build Tools revision 27.0.3
,在Jenkins配置的节点编译服务器上,找不到27.0.3的Build Tools。
因此,我们登录Jenkins配置的节点编译服务器,升级SDK的Build Tools到27.0.3即可解决。具体SDK升级的操作这里就不介绍了。
[root@localhost glibc-build-2.14]# ll /opt/android/sdk/build-tools/
总用量 52
drwxr-xr-x. 4 root root 4096 11月 14 17:20 22.0.1
drwxr-xr-x. 4 root root 4096 11月 14 17:21 23.0.1
drwxr-xr-x. 4 root root 4096 11月 14 17:21 23.0.2
drwxr-xr-x. 4 root root 4096 11月 14 17:22 23.0.3
drwxr-xr-x. 5 root root 4096 4月 11 09:31 25.0.0
drwxr-xr-x. 5 root root 4096 11月 14 14:37 25.0.1
drwxr-xr-x. 5 root root 4096 11月 14 14:37 25.0.2
drwxr-xr-x. 5 root root 4096 11月 14 14:37 25.0.3
drwxr-xr-x. 5 root root 4096 11月 14 14:37 26.0.1
drwxr-xr-x. 5 root root 4096 11月 14 14:37 26.0.2
drwxr-xr-x. 5 root root 4096 11月 14 14:37 26.0.3
drwxr-xr-x. 5 root root 4096 3月 24 10:47 27.0.1
drwxr-xr-x. 5 root root 4096 4月 17 11:36 27.0.3
[root@localhost glibc-build-2.14]#
接着重新编译,就会遇到第二个问题 /lib64/libc.so.6: version `GLIBC_2.14’ not found
二、问题二:/lib64/libc.so.6: version `GLIBC_2.14’ not found
1、问题描述
编译之后出错,就会遇到第二个问题 /lib64/libc.so.6: version `GLIBC_2.14’ not found,具体错误信息如下所示:
:SecureUnisignon:clean
:jslibrary:clean
:watch:clean
:SecureUnisignon:preBuild UP-TO-DATE
:SecureUnisignon:preReleaseBuild UP-TO-DATE
:SecureUnisignon:checkReleaseManifest
:SecureUnisignon:preDebugAndroidTestBuild UP-TO-DATE
:SecureUnisignon:preDebugBuild UP-TO-DATE
:SecureUnisignon:preDebugUnitTestBuild UP-TO-DATE
:SecureUnisignon:preReleaseUnitTestBuild UP-TO-DATE
:SecureUnisignon:prepareComAndroidSupportAppcompatV72221Library
:SecureUnisignon:prepareComAndroidSupportSupportV42221Library
:SecureUnisignon:prepareComXtcBigdataBigdataCommon0020Library
:SecureUnisignon:prepareComXtcBigdataBigdataForApp0011Library
:SecureUnisignon:prepareComXtcDataDataDatabase014Library
:SecureUnisignon:prepareComXtcLogLog101Library
:SecureUnisignon:prepareIoReactivexRxandroid121Library
:SecureUnisignon:prepareReleaseDependencies
:SecureUnisignon:compileReleaseAidl
:SecureUnisignon:compileReleaseNdk UP-TO-DATE
:SecureUnisignon:compileLint
:SecureUnisignon:copyReleaseLint UP-TO-DATE
:SecureUnisignon:compileReleaseRenderscript
:SecureUnisignon:generateReleaseBuildConfig
:SecureUnisignon:generateReleaseResValues
:SecureUnisignon:generateReleaseResources
:SecureUnisignon:mergeReleaseResources
:SecureUnisignon:processReleaseManifest
:SecureUnisignon:processReleaseResources/opt/android/sdk/build-tools/27.0.3/aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/android/sdk/build-tools/27.0.3/aapt)
/opt/android/sdk/build-tools/27.0.3/aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/android/sdk/build-tools/27.0.3/lib64/libc++.so) FAILEDFAILURE: Build failed with an exception.* What went wrong:
Execution failed for task ':SecureUnisignon:processReleaseResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt* Try:
Run with --info or --debug option to get more log output.* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':SecureUnisignon:processReleaseResources'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:239)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:212)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:205)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Failed to execute aapt
at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:185)
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:82)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:245)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:232)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 57 more
Caused by: com.android.ide.common.process.ProcessException: Failed to execute aapt
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:873)
at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:178)
... 65 more
Caused by: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Error while executing '/opt/android/sdk/build-tools/27.0.3/aapt' with arguments {package -f --no-crunch -I /opt/android/sdk/platforms/android-27/android.jar -M /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/intermediates/manifests/aapt/release/AndroidManifest.xml -S /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/intermediates/res/merged/release -m -J /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/generated/source/r/release --custom-package com.bbk.secureunisignon --non-constant-id -0 apk --output-text-symbols /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/intermediates/bundles/release --no-version-vectors}
at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:871)
... 66 more
Caused by: com.android.ide.common.process.ProcessException: Error while executing '/opt/android/sdk/build-tools/27.0.3/aapt' with arguments {package -f --no-crunch -I /opt/android/sdk/platforms/android-27/android.jar -M /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/intermediates/manifests/aapt/release/AndroidManifest.xml -S /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/intermediates/res/merged/release -m -J /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/generated/source/r/release --custom-package com.bbk.secureunisignon --non-constant-id -0 apk --output-text-symbols /data/jenkins/workspace/AP_Develop/SecureUnisignon/build/intermediates/bundles/release --no-version-vectors}
at com.android.build.gradle.internal.process.GradleProcessResult.buildProcessException(GradleProcessResult.java:75)
at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:49)
at com.android.builder.internal.aapt.AbstractProcessExecutionAapt$1.onSuccess(AbstractProcessExecutionAapt.java:78)
at com.android.builder.internal.aapt.AbstractProcessExecutionAapt$1.onSuccess(AbstractProcessExecutionAapt.java:74)
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)
at com.android.build.gradle.internal.process.GradleProcessExecutor$1.run(GradleProcessExecutor.java:60)
Caused by: org.gradle.process.internal.ExecException: Process 'command '/opt/android/sdk/build-tools/27.0.3/aapt'' finished with non-zero exit value 1
at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:367)
at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:47)
... 9 moreBUILD FAILED
2.2、问题分析与解决
从上面的日志可以分析出来,在执行Android编译的时候,aapt执行失败了,因为aapt需要/lib64/libc.so.6文件
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/android/sdk/build-tools/27.0.3/aapt)
/opt/android/sdk/build-tools/27.0.3/aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/android/sdk/build-tools/27.0.3/lib64/libc++.so)
然后我们就去解决该问题。
2.2.1 第一步,查看系统版本
[root@localhost glibc-build-2.14]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@localhost glibc-build-2.14]#
2.2.2 第二步,glibc库版本
root@localhost /]# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
[root@localhost /]#
由上面的信息可以看出系统是CentOS 6.5,最高支持glibc的版本为2.12,而研发程序要2.14版本,所以需要升级。
2.2.3 下载glibc库版本并升级
因为在尝试过程中,没有记录下来,现在我将hitstory操作的写在这里
#下载wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz #解压tar -xvf glibc-2.14.tar.gz tar -xvf glibc-ports-2.14.tar.gz#创建相关目录mv glibc-ports-2.14 glibc-2.14/portsmkdir glibc-build-2.14cd glibc-build-2.14/ #生成C编译的环境yum -y install gcc#编译C../glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/binmake# 安装刚才编译好的 libc.somakeinstall # 查看glibc库版本strings /lib64/libc.so.6 |grep GLIBC_
2.2.3.1 下载glibc-2.14.tar.gz 和 glibc-ports-2.14.tar.gz 并解压
执行以下命令即可下载
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz
执行以下命令即可解压
tar -xvf glibc-2.14.tar.gz
tar -xvf glibc-ports-2.14.tar.gz
下面是下载并解压之后的目录图
2.2.3.2 移动目录并创建目录
mv glibc-ports-2.14 glibc-2.14/ports
mkdir glibc-build-2.14
cd glibc-build-2.14/
将glibc-ports-2.14目录移动到 glibc-2.14/ports,并创建一个目录 glibc-build-2.14,并且接入该目录
2.2.3.3 安装gcc并编译
cd glibc-build-2.14/
../glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
直接编译会出错,会报一个错误 configure: error: no acceptable C compiler found in $PATH,查看提示发现是因为该Linux服务器上没有安装gcc编译器,缺少gcc编译环境,可以通过yum安装gcc编译环境:yum install gcc
错误提示
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
执行以下命令安装gcc
yum install gcc
执行一会儿,gcc环境就安装好了。然后我们可以重新执行上面的编译命令
cd glibc-build-2.14/
../glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
这个命令会执行很长一段时间,大概执行10分钟左右。
如果遇到编译出错问题,可以参考
+ 【工作】Centos6.5 升级glibc解决“libc.so.6: version GLIBC_2.14 not found”报错问题
2.2.3.4 安装刚才编译好的so
继续完成后续的安装,执行下面的命令即可
make install
以上完成不报错的话,查看库文件,发现/lib64/libc.so.6软链接指向了2.14版本
[root@localhost glibc-2.14]# ll /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 4月 17 13:03 /lib64/libc.so.6 -> libc-2.14.so
[root@localhost glibc-2.14]#
2.2.3.5 再次查看glibc支持的版本
[root@localhost glibc-2.14]# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE
[root@localhost glibc-2.14]#
可以看到glibc支持的版本已经到2.14,再次执行程序就不会报错了。
2.3 重新运行Jenkins编译看看
再一次重新运行Jenkins进行编译,发现是编译成功的。大功告成!
三、参考文档
【工作】Centos6.5 升级glibc解决“libc.so.6: version GLIBC_2.14 not found”报错问题
彻底解决 “/lib64/libc.so.6: version `GLIBC_2.18’ not found (required by /lib64/libstdc++.so.6)” 的问题
CentOS 6.2报no acceptable C compiler found in $PATH的解决办法
- configure: error: no acceptable C compiler found in $PATH 问题解决
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/79974407如果觉得本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行随意打赏。您的支持将鼓励我继续创作!
向我提问
相关文章:

解析大型.NET ERP系统 设计异常处理模块
异常处理模块是大型系统必备的一个组件,精心设计的异常处理模块可提高系统的健壮性。下面从我理解的角度,谈谈异常处理的方方面面。我的设计仅仅限定于Windows Forms,供参考。 1 定义异常类型 .NET 框架定义很多异常类型,ERP系统中…

内含福利|CSDN 携手字节跳动:云原生Meetup北京站报名热烈启动,1月8日见!
伴随云原生技术的成熟与落地,越来越多框架、中间件等开源项目相继涌现,帮助开发者和企业有效解决业务问题。2022年1月8日,CSDN携手字节跳动基础架构,将在北京举办第四场云原生线下Meetup。在这里,您可以与众多开源技术…

用Thymeleaf在前台下拉列表取值
转自:https://blog.csdn.net/u013600907/article/details/76165748转载于:https://www.cnblogs.com/sharpest/p/8875698.html

PHP使用JSON
JSON 基础 简 单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看…

(原创)Python文件与文件系统系列(5)——stat模块
stat模块中定义了许多的常量和函数,可以帮助解释 os.stat()、os.fstat()、os.lstat()等函数返回的 st_result 类型的对象。 通常使用 os.path.is*() 这类函数来测试一个文件的类型,这些方法对同一个文件进行多次测试时,stat()系统调用都是不可…

Azure Neural TTS能让AI语音自然逼真到什么程度?
摘要:微软Azure Neural TTS让AI语音像真人一样富有感情,自然逼真。 Neural TTS(神经网络文本转语音)是微软Azure认知服务的强大语音合成功能,自推出以来,已被广泛应用于从语音助手、新闻阅读到有声读物创作…

ReentrantLock与synchronized
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用 synchronized ,如…

EXT按钮事件
在EXT中,当我们要为按钮点击添加处理function的时候,可以看到一般人的实现分成2类:1.使用onClick: function xx()2.使用handler: function xx()完成后,我们会发现,无论用哪一种实现,再点击按钮时都能触发xx…

浅谈HTTP中Get与Post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而H…

达摩院年终预测重磅出炉:AI for Science 高居榜首,2022 十大科技趋势!
整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)作为“一所探索科技未知的研究院”,阿里巴巴达摩院成立至今已经四年了。这四年来,达摩院秉持着“探索科技位置,以人类愿景为驱动力,开展基础科学和颠覆式…
TensorFlow——入门基础
TensorFlow原理: TensorFlow使用Graph来描述计算任务,图中的节点被称之为op.一个op可以接受0或多个tensor作为输入,也可产生0或多个tensor作为输出.任何一个Graph要想运行,都必须借助上下文Session.通过Session启动Graph,并将Graph中的op分发到CPU或GPU上,借助Sessi…

EXT iconCls说明
今天学习ext 看examples中的事例,其中有一个地方是这样写的: new ButtonPanel( Icon Only, [{ iconCls: add16 },{ iconCls: add24, scale: medium },{ …

25个好用到爆的一行 Python 代码,建议收藏
作者 | 欣一来源 | Pyhton爱好集中营在学习Python的过程当中,有很多复杂的任务其实只需要一行代码就可以解决,那么今天小编我就来给大家介绍实用的一行Python代码,希望对大家能够有所帮助。1.两个字典的合并x {a: 1, b: 2} y {c: 3, d: 4}将…

【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 服务接口的作用 围绕着设备驱动模块采集的数据,根据需求提供多种应用服务,例如:数据上传服务、数据请求服务、4-20mA服务、短信服务、LED服务以及OPC服务等。保障数…

usermod命令,用户密码管理和mkpasswd命令
2019独角兽企业重金招聘Python工程师标准>>> usermod 设置扩展组 概念:更改用户属性的一个命令。 用法:usermod [选项] 后面跟你需要操作的内容 [用户名] 选项:-c, --comment 注释 GECOS 字段的新值-d, --home HO…

extjs关于jsonreader
在JavaScript中,JSON是一种非常重要的数据格式,key:value的形式比XML那种复杂的标签结构更容易理解,代码量也更小,很多人倾向于使用它作为EXT的数据交换格式。JsonReader支持分页,与JSON数据对应格式如下:t…

求逆元 - HNU 13412 Cookie Counter
Cookie Counter Problems Link: http://acm.hnu.cn/online/?actionproblem&typeshow&id13412&courseid0 Mean: 将N分为D份,每份不超过X,有多少种分法? analyse: 首先我们想到的是迭代,但是数据太大,…

IEEE 发布年终总结,AI 奇迹不再是故事
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 2021 年,人工智能奇迹不再只是故事! 人工智能正在迅速融入各行各业,IEEE Spectrum 总结了 2021 年 10 篇最受读者欢迎的 AI 文章,按时间排名,…

一则利用内核漏洞获取root权限的案例【转】
转自:https://blog.csdn.net/u014089131/article/details/73933649 目录(?)[-] 漏洞描述漏洞的影响范围漏洞曝光时间漏洞产生的原因漏洞的利用exploit代码分析kernel 最近出了一个新的本地提权安全漏洞CVE-2013-1763,影响范围比较广泛,ubunt…

Ext.data库
Ext.data 库主要包括以下几个类:Ext.data.Store >DataSetExt.data.Record >DataSet.RowExt.data.DataProxy >SqlConnectionExt.data.DataReader >SqlDataAdapter以下分别进行介绍:1.Ext.data.Record可以用来定义一行数据的格式,它有几个重要的属性和方法…

2021年最有用的数据清洗 Python 库
作者 | 周萝卜来源 | 萝卜大杂烩大多数调查表明,数据科学家和数据分析师需要花费 70-80% 的时间来清理和准备数据以进行分析。对于许多数据工作者来说,数据的清理和准备也往往是他们工作中最不喜欢的部分,因此他们将另外 20-30% 的时间花在抱…

组合与继承之重写方法和字段
为什么80%的码农都做不了架构师?>>> 接上篇blog,scala里的字段和方法属于相同的命名空间,这让字段可以重写无参数方法。例如,你可以通过改变ArrayElement类中contents的实现将其从一个方法变为一个字段,而…

20165334 四则运算阶段性总结(第二周)
四则运算阶段性总结(第二周) 结对对象 学号 :20165334 姓名 : 李天龙 担任角色 (驾驶员):李天龙 (副驾驶):陈国超 一、实验实现步骤 整数计算类分数计算类自动…

取消掉Transfer-Encoding:chunked
有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。进行Chunked编码传输的HTTP Response会在消息头部设置:Tra…

【LeetCode】142 - Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up:Can you solve it without using extra space? Solution: Discuss上的分析:Suppose the first meet at step k,the length of the Cycle …

3000 字详解 Pandas 数据查询,建议收藏
作者 | 俊欣来源 | 关于数据分析与可视化今天小编来和大家说一说怎么从DataFrame数据集中筛选符合指定条件的数据,希望会对读者朋友有所帮助。导入数据集和模块我们先导入pandas模块,并且读取数据,代码如下import pandas as pd df pd.read_c…

stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承
一、内置方法 返回各种颜色的比重(如red(color)等) 颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮、变暗、渐变颜色等处理十分的方便。 lighten(color, 10%); /* 返回的颜色在color基础…

用 Python 制作酷炫的可视化大屏,特简单!
作者 | 小F来源 | 法纳斯特在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章、信息冗余、价值较低。要想数据达到生动有趣、让人一目了然、豁然开朗的效果,就需要借助数据可视化。以…

HTTP协议中的Tranfer-Encoding:chunked编码解析
当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。chu…

[转] splice系列系统调用
关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论。随着内核研究的深入,才逐渐懂得&…