1.Mac 下的源译 C++ 开发环境 XCODE和其他介绍
2.å¦ä½ç¨Macå®ç¾ç¼è¯OpenJDK 7
3.详解三大编译器:gcc、llvm 和 clang
4.mac ä¸å¦ä½è£
libc++ï¼
5.开源编译器有哪些
6.mac电脑用llvm/gcc替换自带的码编appleclang,编译出问题,求助?
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开发环境的配置,个人了解有限,提供的建议仅供参考,旨在提供一种可能的解决思路。