1.为什么clang不能取代gcc?
2.在安卓平台上安装GCC的方法?
3.在android4.0.几的版本上会出现这个问题,在线求解答
为什么clang不能取代gcc?
讨论是否有可能用Clang取代GCC,首先需要深入理解两者在编程生态系统中的定位与功能。
GCC(GNU Compiler Collection)作为开源项目,广泛应用于Linux、Android等操作系统,提供了一个强大且稳定的珊潮源码编译环境。它的核心功能是将源代码转换为机器可执行的代码,同时也提供了链接、汇编、调试等工具。GCC的社区庞大,开发者活跃,这意味着它拥有持续的技术更新和优化,以及广泛的铅笔小说源码下载社区支持。
Clang,作为一个相对较新的编译器,其设计目标是提供更快的编译速度以及更准确的错误提示。Clang基于LLVM(Just a Memory Model)构建,具有更好的代码分析能力,能够与LLVM的其他工具无缝集成。Clang的目标用户是那些需要快速编译和高质量错误信息的开发者。
虽然Clang在某些方面表现出色,但它难以直接取代GCC,原因如下:
首先,依赖和生态系统。GCC作为开源社区的重要组成部分,拥有庞大的获客平台源码用户基础和丰富的依赖库。切换到Clang需要对整个生态系统进行调整,包括库、框架、工具链等,这将是一个巨大且复杂的过程。
其次,兼容性问题。GCC支持多种编程语言和标准版本,对于一些特定的代码和库,它可能提供更好的兼容性和支持。Clang虽然也在努力支持不同语言和标准,但与GCC的全面兼容性相比,仍存在差距。日出东方公式源码
再次,社区与贡献。GCC拥有庞大的开发者社区,这意味着更多的资源、技术支持和创新。Clang虽然也活跃,但考虑到开源生态的特性,GCC的社区支持可能会更有保障。
最后,控制与分裂风险。若Clang被大厂控制,确实有可能导致其发展方向与开源精神背离,引发社区分裂。追剧tv源码历史上的例子如WebKit,尽管它在开源社区中拥有一定的影响力,但其归入苹果公司后的发展轨迹,确实让部分开发者对商业化倾向表示担忧。
综上所述,虽然Clang在某些方面有其优势,但取代GCC并非易事。考虑到依赖、兼容性、社区支持以及控制风险等多方面因素,Clang难以直接取代GCC在编程生态系统中的核心地位。
在安卓平台上安装GCC的方法?
在Android平台上安装GCC涉及以下步骤:
1. 准备必要的文件:下载并安装Terminal IDE.apk,同时获取GCC的源文件。
2. 安装Terminal IDE:将下载的Terminal.apk安装到你的Android手机上。之后,将GCC文件复制到手机的特定目录中。这个目录通常是:/data/data/com.spartacusrex.spartacuside/files/system。
3. 修改环境变量:打开终端IDE,并编辑位于:/data/data/com.spartacusrex.spartacuside/files/目录下的.bashrc文件。在该文件中添加以下行:
```bash
export CPLUS_INCLUDE_PATH=$IDESYSTEM/gcc/arm-linux-androideabi/c++/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=$IDESYSTEM/gcc/arm-linux-androideabi/include:$C_INCLUDE_PATH
export PATH=$IDESYSTEM/gcc/bin:$PATH
```
4. 重命名GCC工具:在GCC的bin目录下,将`arm-linux-androideabi-g++`重命名为`g++`,将`arm-linux-androideabi-gcc`重命名为`gcc`。
5. 重启IDE:完成上述步骤后,重启你的终端IDE,你现在应该可以开始使用GCC进行编译了。
关于GCC的背景信息:
GCC(GNU Compiler Collection)是一组由GNU项目开发的编程语言编译器。它以GPL许可证发布,是一套自由软件,也是GNU计划的核心组成部分。最初是为了构建GNU操作系统而开发的GCC,现在广泛用于多种类Unix操作系统,包括Linux、BSD、Mac OS X等,并成为这些系统中的标准编译器。GCC同样支持Windows平台。
GCC的名称源于“GNU C Compiler”,最初它只能编译C语言代码。随着功能的扩展,GCC开始支持C++,并逐步增加对其他编程语言如Fortran、Pascal、Objective-C、Java、Ada、Go以及各种处理器架构的汇编语言的编译能力,因此更名为GNU Compiler Collection。
在android4.0.几的版本上会出现这个问题,在线求解答
在尝试编译Android 4.0.x版本的源码时,遇到的问题多种多样。以下是将这些问题及其解决方案列举出来的内容,条目之间换行,以清晰的条目编号呈现。
1. 错误:/usr/include/gnu/stubs.h:7:: error: gnu/stubs-.h: No such file or directory
解决:sudo apt-get install libc6-dev-i
2. 错误:make: *** [out/host/linux-x/obj/EXECUTABLES/acp_intermediates/acp] error 1
解决:sudo apt-get install g++-4.4-multilib
3. 错误:external/clearsilver/cgi/cgi.c:: fatal error: zlib.h: No such file or directory
解决:sudo apt-get install zlib1g-dev
4. 错误:/usr/bin/ld: cannot find -lz
解决:sudo apt-get install libz1-dev
5. 错误:bison -d -o out/host/linux-x/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y
解决:sudo apt-get install bison
6. 错误:Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
解决:sudo apt-get install flex
7. 错误:/usr/bin/ld: cannot find -lncurses
解决:sudo apt-get install libncurses5-dev
8. 错误:prebuilt/linux-x/sdl/include/SDL/SDL_syswm.h:: fatal error: X/Xlib.h: No such file or directory
解决:sudo apt-get install libx-dev
9. 错误:sh: gperf: not found
解决:sudo apt-get install gperf
. 错误:build/core/java.mk:9: *** bin: Target java module does not define any source or resource files. Stop.
解决:删除源码根目录下的bin文件夹,这个文件夹是导入eclipse时创建的。
. 错误:/usr/bin/ld: cannot find -lX
解决:sudo ln -s /usr/lib/i-linux-gnu/libX.so.6 /usr/lib/i-linux-gnu/libX.so
. 错误:development/tools/emulator/opengl/host/libs/Translator/GLDispatch.cpp:: fatal error: GL/glx.h: No such file or directory
解决:sudo apt-get install libgl1-mesa-dev
. 错误:host SharedLib: libEGL_translator (out/host/linux-x/obj/lib/libEGL_translator.so)
解决:sudo apt-get install libglu1-mesa-dev
. 错误:host StaticLib: libGLcommon (out/host/linux-x/obj/STATIC_LIBRARIES/libGLcommon_intermediates/libGLcommon.a)
解决:sudo ln -s /usr/lib/i-linux-gnu/mesa/libGL.so.1 /usr/lib/i-linux-gnu/libGL.so
. 错误:make: *** [out/host/linux-x/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
后来发现了,原来是Ubuntu .里的gcc和g++版本太高了,于是执行下面的操作:
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
把默认的4.6版本换为了4.4,继续编译源码,又出现了另一个错误,大致提示为:
g++ selected multilib '' not installed
继续奋战吧,安装相应的工具吧:sudo apt-get install g++-4.4-multilib,现在正在make -j8(开启多线程编译(不推荐),可能有时候会出现问题,最好是直接make)
2. 解决各种依赖问题
首先安装一些库
?View Code BASH
1 sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev
2 sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential
3 sudo apt-get install zlib1g-dev pngcrush schedtool ia-libs libncurses5-dev
这些库可能不全,如果出现问题,再google一下吧
3. error: “_FORTIFY_SOURCE” redefined [-Werror]
这个问题,据说与gcc版本有关,4.4版不会出现。
后来在google code上找到了使用gcc 4.6编译的方法
修改build/core/combo/HOST_linux-x.mk文件line
?View Code BASH
1 -HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
2 +HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
这是CyanogenMod打上的补丁
4. No rule to make target ‘out/target/product/generic/obj/lib/libcamera.so’
修改 /home/Android-2.3.4/frameworks/base/services/camera/libcameraservice/Android.mk,USE_CAMERA_STUB:=false -> true
?View Code BASH
1 LOCAL_PATH:= $(call my-dir)
2
3 # Set USE_CAMERA_STUB if you don't want to use the hardware camera.
4
5 # force these builds to use camera stub only
6 ifneq ($(filter sooner generic sim,$(TARGET_DEVICE)),)
7 USE_CAMERA_STUB:=true
8 endif
9
#########CHANGE THIS LINE############
USE_CAMERA_STUB:=true
ifeq ($(USE_CAMERA_STUB),)
USE_CAMERA_STUB:=false
endif