【查单号源码】【免采集源码】【空间社区源码】mac源码编译llvm

时间:2024-12-23 03:41:35 分类:2022年新游戏源码 来源:淘宝数据采集 源码

1.Mac 下的源译 C++ 开发环境 XCODE和其他介绍
2.如何用Mac完美编译OpenJDK 7
3.详解三大编译器:gcc、llvm 和 clang
4.mac 上如何装 libc++?
5.开源编译器有哪些
6.mac电脑用llvm/gcc替换自带的码编appleclang,编译出问题,求助?

mac源码编译llvm

Mac 下的 C++ 开发环境 XCODE和其他介绍

       Xcode,版本4.6.3,源译内置了创建C++项目的码编功能,操作步骤如下:首先打开Xcode并新建项目,源译选择OS X中的码编查单号源码Application内的Command Line Tool选项,然后在项目设置中选择Type为C++。源译若不需要使用自动引用计数(ARC),码编取消勾选C++选项。源译完成这些步骤后,码编即可在Xcode中创建一个基础的源译C++项目。

       值得注意的码编是,Xcode默认使用的源译C++编译器是Apple LLVM Compiler(4.6.3版本为4.2),默认标准库为libc++,码编已支持C++标准(先前的源译C++0x)。Xcode同时提供了LLVM GCC编译器,其附带的C++标准库为libstdc++。在引入第三方库时,需特别注意选择,例如OpenCV可能需要将标准库设置为libstdc++。

       如果选择不使用IDE,免采集源码直接通过命令行编译C++项目也很容易,只需要使用编译器即可。

       接下来,我们简要介绍C++的编译过程。编译过程包含预处理、编译和链接等步骤,目的是从源代码生成可执行文件。compiling仅是整个build过程的一部分,但人们经常会误将compile视为整个过程。通常情况下,这些步骤由编译器自动完成,无需单独运行命令。

       Mac上默认拥有LLVM和GCC两大编译工具。

       LLVM起源于“Low Level Virtual Machine”项目,由Chris Lattner和Vikram Adve于年在伊利诺伊大学厄巴纳-香槟分校开始。年Apple雇佣了Chris Lattner,组建团队专注于LLVM在Apple开发系统上的应用。目前,LLVM是MacOS和iOS开发工具的关键组成部分。

       LLVM项目是空间社区源码一个综合项目,包括了一系列与开发工具相关的技术,如编译器Clang、调试器LLDB、JIT系统VMKit、优化器DragonEgg等。

       GCC,全称为GNU Complier Collection,是GNU项目的核心组成部分,由自由软件之父Richard Stallman于年发起。GCC最初只支持C语言编译,1.0版本后开始支持C++,随后支持了Objective-C、Objective-C++、Fortran、Java、Ada、Go等其他语言。

       选择LLVM或GCC取决于具体需求。GCC历史悠久,支持范围广泛,zabbix源码调试许多开源项目直接使用GCC作为编译器。而LLVM相较于GCC的优势在于:编译速度快、内存占用小、模块化设计易于集成及其他用途的重用、诊断信息可读性强、设计清晰简单、易于理解和扩展。通过GCC和Clang的相应编译选项,可以查看build过程的各个步骤,如仅执行预处理、编译阶段或生成对应名称的对象文件等。

       关于GCC和Clang的编译选项,通过man gcc和man clang可以获取更多详细信息。

如何用Mac完美编译OpenJDK 7

       1.选择OS X版本很重要。

        目前这里Mac版本是.,配置好必要信息以后就开始编,结果错误满屏。简单看过之后发现是编译C文件的时候参数有误,于是查了一下,才知道是LLVM版本太新,不兼容低版本的一些编译参数。照着上面改了点代码,但是依旧编译不过。既然高版本不行,就装个低版本的呗。由于最新的OS X不能装低版本的Xcode(装了Xcode才能装LLVM),所以去下了一个.8的OS X装在虚拟机里,然后再装个Xcode4.4。

        装好Xcode以后,要手动下载LLVM安装。打开Xcode,随便建立一个空项目,然后打开Preferences,找到如下所示的地方开始安装

       ç¬¬ä¸€æ­¥å’±å°±è¿™ä¹ˆæžå®šäº†ã€‚

       2.安装X

        X这玩意是unixç±»os使用的图形系统,.8以前的OS X是自带的,但是从此以后就不自带了。对应于Mac,你需要装XQuartz,这个没有版本限制,去网上下最新版即可。装这个的原因是当时在编译PolicyTools的时候出现了如下错误:

       ld: library not found for -lX

       å®‰è£…以后要为X建立软连接

       sudo ln -s /usr/X/include/X /usr/include/X

       3.安装freetype

        在linux下编译openjdk的朋友可能遇到过需要安装freetype的要求,然后安装下并将安装目录加到环境变量里就好了。但是OS X不一样,freetype单独安装实际是没用的。虽然单独安装能让编译前的检查通过,但是到后面还是会出错,至于原因我没找到。那怎么办呢?实际上如果安装好X,freetype就一起安装好了,大家可以去X的目录里看看是否有freetype。

       è™½ç„¶è¯´å®‰è£…了X就自带freetype,但是编译过程中可能会出现如下错误:

       error: freetype/config/ftheader.h: No such file or directory

       å®žé™…上就是目录问题,执行下面这句命令就好了:

       sudo ln -s /sr/X/include/freetype2/freetype/ /usr/X/include/freetype

       4. 配置环境变量

        和在Linux下编译相比,OS X的环境变量配置相对来说简单很多。只需要配置编译需要的jdk和llvm的目录就可以了。

        因为很多源代码都是用本机现有的jdk来编译,所以预装一个低版本的jdk是必须的,这里我们需要安装jdk6。安装好以后,找到其安装目录,并添加如下环境变量:

       [plain] view plaincopy

       export ALT_BOOTDIR=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

        通常来说安装目录都应该在/System/Library/Java/JavaVirtualMachines目录下。如果不在的话,有个技巧可以找到。因为安装好jdk以后,系统会自动在/usr/bin下建立指向java命令的软连接,所以执行“ls -l /usr/bin/java”就能看到这个命令指向哪,然后这么顺着找下去就能找到。

        llvm是编译C类文件所必须的,所以要把它的所在目录添加到环境变量里。通常OS X下安装app都会把app移到Applications目录下,所以我最初安装Xcode的时候也把他移进去了,如果你把Xcode放在了别的目录,那就找到对应的目录即可。

       [plain] view plaincopy

       export ALT_COMPILER_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin

       5.获取编译源码

       æŒ‰ç…§è¿™ä¸Šé¢çš„第三点获取源代码 如果没有装hg的需要自行安装

       åˆ°çŽ°åœ¨ä¸ºæ­¢ï¼Œç¼–译前的准备工作已经完成。我们可以先执行make sanity执行下编译前的检查。如果检查通过,先来看看具体的编译命令:

       [plain] view plaincopy

       make ALLOW_DOWNLOADS=true SA_APPLE_BOOT_JAVA=true SKIP_DEBUG_BUILD=false SKIP_FASTDEBUG_BUILD=false ALWAYS_PASS_TEST_GAMMA=true HOTSPOT_BUILD_JOBS=`sysctl -n hw.ncpu`

       è¿™é‡Œæœ‰ä¸¤ä¸ªé—®é¢˜ï¼š

       a. ALLOW_DOWNLOADS=true表示编译过程中允许下载。因为有些编译模块,比如jaxp,编译脚本中指定了需要下载特定的包。虽然我没试过设置成false会不会影响编译,但是还是推荐设置成true。但是这就带来另一个问题,下载这类包很费时间,有时候就会在那卡很长时间,所以我根据编译日志找到编译脚本中控制下载的具体命令,修改修改并且把用迅雷下的对应包放到正确目录中,然后重新编译一遍,就能顺利通过了。这一点后面我会详说。

       b. SKIP_DEBUG_BUILD=false SKIP_FASTDEBUG_BUILD=false这两个表示编译出来的jdk或者hotspot是否可以debug。FASTDEBUG表示的应该是提供简单的debug功能,如果想要完整的debug,则SKIP_DEBUG_BUILD必须设置为false。不过这里提醒一点,如果想在debug jdk的时候能看到debug信息,比如变量名等,只需要SKIP_FASTDEBUG_BUILD设置为false就可以了

       å¦‚果这两个问题都不是问题,那么就可以按回车了。如果debug和fastdebug都是false,再加上用虚拟机编译,所以需要的时间会比较长,你也许需要找一部长一点的电影来消磨一下了。最后编译出来的结果是这样的:

       j2sdk-image就是自己编译出来的jdk,可以直接用了。至于其他目录下的内容,各位自己琢磨吧。

       çŽ°åœ¨æ¥è¯´ä¸‹ALLOW_DOWNLOADS=true引起的问题。

       ä½†æ˜¯é‡åˆ°ä¸‹è½½å¾ˆä¹…的包总共有三个:

       jaxp_.zip、jdk7-jaf-__.zip、jdk7-jaxws2_2_4-b-__.zip

       ä¹‹å‰è¯´è¿‡å¯ä»¥ä¿®æ”¹ç¼–译脚本跳过下载并且用我们已经下载好的,但是实际编译过程中,这三个包对应的的编译脚本是动态生成的,所以只能等到他卡在那了,才能停下来并找到脚本修改之。因此因为这三个包,总共需要停3次。,比起一直卡在那好太多了。

       å‡è®¾ç¼–译的是普通版本,即非DEBUG和非FASTDEBUG。下面以jaxp_.zip为例子讲一下怎么修改对应脚本:

       è„šæœ¬æ‰€åœ¨ä½ç½®ï¼šopenjdk根目录/build/macosx-universal/jaxp/build/xml_generated/build-drop-jaxp_src.xml

详解三大编译器:gcc、llvm 和 clang

       详解三大编译器:gcc、llvm和clang

       编译器结构通常包括前端、优化器和后端。前端负责解析源代码,语法分析,生成抽象语法树;优化器在此基础上优化中间代码,威信通源码追求效率提升;后端则将优化后的代码转化为特定平台的机器码。

       GNU Compiler Collection (gcc)起源于C语言编译器,后来扩展支持多种语言。然而,苹果公司由于对Objective-C特性和IDE需求的特殊性,与gcc分道扬镳,转而引入了LLVM。LLVM不仅提供编译器支持,还是一个底层虚拟机,可作为多种编译器的后端,其优点在于模块化和代码重用。

       Chris Lattner,这位编译器大牛,凭借在LLVM的研究和开发,特别是他提出的编译时优化思想,使得LLVM在苹果的Mac OS X .5中大放异彩。Clang是LLVM的前端,专为C、C++和Objective-C设计,旨在替代gcc。Clang在速度、内存占用和诊断信息可读性方面优于gcc,同时支持更多的编程语言和API集成。

       在选择gcc、LLVM和Clang时,最新项目推荐使用LLVM-GCC,因为它稳定且成熟,是Xcode 4的预设。然而,老版本的gcc不推荐使用,因为苹果对其维护较少。对于动态语言支持和代码重用,LLVM的特性更胜一筹,它不仅是一个编译器集合,更是库集合,为开发者提供了更大的灵活性。

       总的来说,LLVM通过提供通用中间代码和模块化设计,解决了传统编译器的局限,使代码重用成为可能,这使得它在现代编译器领域中独具优势。

mac 上如何装 libc++?

       å…¶å®žxcode自带的就有clang,版本也非常非常新。但是缺了一些我需要的组件,于是我得自己重新编译一下。但是我又不想覆盖原来的clang/libc++。因为那很危险,万一我编译的libc++有bug,而我又拿它覆盖了系统本身的libc++,那么我很可能连系统都进不去了。Linux用户不妨对比下自行编译glibc的风险。

       æˆ‘也不知道apple对clang改了什么,我是从llvm官网上下载代码并编译。

       å®˜ç½‘有文档,但是那文档有些问题。在我机器上行不通。我摸索出另一个办法。

       é¦–先编译llvm/clang

       ç›®å½•æ ‘如下:

       llvm: llvm.org/svn/llvm-project/llvm/trunk

       llvm/tools/clang: llvm.org/svn/llvm-project/cfe/trunk

       llvm/tools/clang/tools/extra: llvm.org/svn/llvm-project/clang-tools-extra/trunk

       llvm/projects/compiler-rt: lvm.org/svn/llvm-project/compiler-rt/trunk

       ç„¶åŽåœ¨llvm目录下运行

       ./configure —enable-libcpp —enable-cxx —enable-keep-symbols —disable-docs —enable-debug-runtime —enable-debug-symbols —enable-optimized CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++

       make

       make install

       XCode软件包里我故意删掉了command line tools,以免造成冲突。

       ç„¶åŽå°±æ˜¯libcxxabi和libcxx

       libcxxabi: llvm.org/svn/llvm-project/libcxxabi/trunk

       libcxx:llvm.org/svn/llvm-project/libcxx/trunk

       å…ˆè£…abi,后装libcxx。

       buildit之前先export TRIPLE=-apple-

       è¿™è¿˜ä¸å¤Ÿï¼Œæ‰“å¼€lib/buildit文件,把install_name后面的/usr/lib/libc++abi.dylib 改成/usr/local/lib/libc++abi.dylib 才行。

       ç„¶åŽ

       ./buildit

       æ‰‹åŠ¨å°†ç¼–译好的文件copy到/usr/local/lib目录下。

       ç„¶åŽlibcxx也是类似,先修改buildit文件。

       è¿™äº›éƒ½å®Œæˆä¹‹åŽï¼Œè¿˜ä¸å¤Ÿã€‚编译的时候要先用-nostdinc++禁止从/usr/lib目录下寻找头文件和库文件。然后手动把我们的目录包含进去,如下:

       clang++ -o t -nostdinc++ -std=c++ -stdlib=libc++ -I /usr/local/lib/c++/v1 -L/usr/local/lib test.cpp

       ä¹‹åŽå†ç”¨otool 看就对了

       $ otool -L ./t

       ./t:

        /usr/local/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)

        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version .3.0)

开源编译器有哪些

       开源编译器有很多,以下是其中一些常见的开源编译器:

       1. GCC(GNU编译器集合)

       GCC是一款非常流行的开源编译器,支持多种编程语言,如C、C++、Fortran等。它提供了多种平台上的编译工具,可在多种操作系统上运行,包括Linux、Windows和macOS等。GCC具有高度的可配置性和灵活性,可以优化代码的性能和可移植性。

       2. Clang(LLVM编译器)

       Clang是一种基于LLVM(Low Level Virtual Machine)的开源编译器,支持多种编程语言,包括C、C++和Objective-C等。Clang以其高效的编译速度和良好的代码生成质量而闻名。它还提供了丰富的工具链,包括静态分析器和优化器等,可以帮助开发人员发现和修复代码中的错误。

       3. MSVC(Microsoft Visual C++)

       虽然MSVC主要不是作为开源编译器出现的,但它的某些版本提供了一些开源的特性。MSVC是一个为Windows操作系统设计的C++编译器,它的开发环境提供了丰富的集成开发功能,包括调试、图形用户界面设计等。近年来,随着开源软件的普及,Microsoft也逐渐开始向开源社区开放了一些MSVC的功能和资源。

       4. ICC(Intel C++ Compiler)

       虽然ICC是Intel公司推出的商业编译器产品,但其部分功能和部分源代码的开源也为开发者带来了极大的便利。它可以优化基于Intel硬件的程序性能。在特定的操作系统平台上使用Intel的优化技术,可以让代码的性能达到最优状态。在一些项目中也可以选择开源的版本来使用。此外还有一些专项语言或平台的开源编译器,例如针对Java的OpenJDK编译器等。开发者可以根据实际需求选择合适的开源编译器进行开发。

mac电脑用llvm/gcc替换自带的appleclang,编译出问题,求助?

       在尝试替换Mac电脑上的自带AppleClang编译器时,若遇到使用gcc编译出问题的情况,问题可能出在c++库的函数上。若链接器无法找到Apple自家打包的SDK,就会出现链接错误。使用gcc时,确保添加正确的编译参数,以解决可能存在的库函数查找问题。

       针对Clang编译时的错误,可能是SDK中的c++库不支持新的语法特性。在CMake中尝试将编译器支持版本设置为,以检查是否解决了兼容性问题。如果需要使用C++特性,可能需要升级编译器及macOS的SDK,确保环境支持所需功能。

       面对问题解决困难的情况,可尝试两种方法。一种是访问github项目如github.com/llvm/llvm-pr...,但需注意这要求具备一定的编译基础,确保了解每一步操作的目的。另一种方法是利用homebrew下载新版本的Clang。然而,下载的版本可能并非最新,且不一定支持C++特性。

       在Mac上开发C++时,可能会遇到较多问题,且网上资料相对较少。若条件允许,建议在Linux环境中进行开发,以利用更多资源和工具。关于Mac开发环境的配置,个人了解有限,提供的建议仅供参考,旨在提供一种可能的解决思路。