文档章节

Mac OS 下的 gcc gdb

maxio-yu
 maxio-yu
发布于 2015/09/30 00:29
字数 848
阅读 1230
收藏 3

好久没有写c了,今天和老婆大人一起做了一下微软的网上编程题。发现忘了好多。

由于有运行时错误,所以想用gdb调试一下,发现没有gdb,遂使用homebrew安装,结果安装出错。后来发现错误的原因应该是找不到gcc!可是我一直用gcc编译程序的啊,好奇怪!

这两天vpn不稳定,只能百度,好不容易才发现了原因:


从Mac OS 10.9开始,安装Xcode5时不会再安装gcc了,而系统中的gcc实际上只是一个别名。

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.0.0 (clang-700.0.72)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

$ clang -v
Apple LLVM version 7.0.0 (clang-700.0.72)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

可以看到gcc实际上就是clang,而clang对应的调试工具是lldb。可是你既然给clang起了别名叫gcc,你就不能好人做到底给lldb也起一个别名么?

我自己在/usr/bin下边建了一个symbol link,以后就可以方便的使用gdb了。

顺便也看了下clang,LLVM和gcc的关系,有兴趣的各位也可以去搜索一下clang和gcc的优劣,现在看来,对于C语言的支持上,clang应该是占有绝对优势的(当然不是指市场占有率,而是用户体验)。

clang

clang: a C language family frontend for LLVM

The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler. 

也就是说clang是一个编译器的前端,主要负责语法,词法分析并生成LLVM可以理解的代码传递给LLVM进行编译。

LLVM

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them. The name "LLVM" itself is not an acronym; it is the full name of the project.

LLVM began as a research project at the University of Illinois, with the goal of providing a modern, SSA-based compilation strategy capable of supporting both static and dynamic compilation of arbitrary programming languages. Since then, LLVM has grown to be an umbrella project consisting of a number of subprojects, many of which are being used in production by a wide variety of commercial and open source projects as well as being widely used in academic research. Code in the LLVM project is licensed under the "UIUC" BSD-Style license.

LLVM则是主要的编译并产生机器码的部分。

gcc

The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, Ada, and Go, as well as libraries for these languages (libstdc++, libgcj,...). GCC was originally written as the compiler for theGNU operating system. 

其实gcc并不是一个软件,而是一套软件,全称GNU Compiler Collection。相对于clang和LLVM来说,也会分为前端,后端,回想一下编译原理,gcc实际上会首先调用cpp对程序进行预处理,这也就相当于clang所做的工作,然后会调用cc1和ld来进行编译和链接,这就相当于LLVM所做的工作。

这里有一篇文章很好的解释了clang/LLVM的发展历史,水果公司和gcc之间的合作以及矛盾等:

GCC,LLVM,Clang  作者 肖雨宸 

从这篇文章中可以看到他们的组合并不是绝对的,gcc同样也可以和LLVM搭配使用。


参考文献:

1,clang官方网站:

http://clang.llvm.org/index.html

2,LLVM官方网站:

http://www.llvm.org/

3,gcc官方网站:

http://gcc.gnu.org/

© 著作权归作者所有

maxio-yu

maxio-yu

粉丝 1
博文 11
码字总数 6440
作品 0
荆门
私信 提问
加载中

评论(1)

s
sttttorm
为啥都不带了。。连写java都要重新配置。。
MAC下安装gdb

mac下目前是没有gdb的,xcode自带了gcc和lldb,为了学习一下gdb,决定在自己的macbook上安装gdb。 基于OS X EI Capitan 10.11.3 安装步骤如下: 1、先更新brew brew update 2、安装gdb brew ...

Jack鸿燊
2016/02/20
141
0
使用eclipse与jLink V8调试exynos 4412 u-boot

/ @author Maoxiao Hu @version V1.0.1 * @date Dec-2014 * < COPYRIGHT 2014 ISE of SHANDONG UNIVERSITY > */ 首先说一下我实验室的网络环境:一台搭载ubuntu系统的公用Linux服务器,数台客......

Jr小王子
2015/12/16
140
0
Mac上使用 gdb 调试程序

gdb 最新版本的 Mac 默认只能使用 lldb 进行程序调试,但对于习惯使用 gdb的人来说还是希望在Mac下使用gdb调试程序才感得更爽。 有没有办法可以在最新的Mac版本上使用gdb呢?当然可以,不过稍...

音视频直播技术专家
2018/01/10
0
0
GNU toolchain

GNU工具链(GNU toolchain)是一个包含了由GNU项目所产生的各种编程工具的集合。这些工具形成了一条工具链(串行使用的一组工具),用于开发应用程序和操作系统。 GNU工具链在针对嵌入式系统...

匿名
2012/02/20
5.5K
0
Mac下窥探私有API

苹果已走向平民化,所以着手mac下的开发,发现一篇文章,与大家分享:http://cocoainchromium.blogspot.com/2011/05/disassembling-private-apis-on-mac-os-x.html Disassembling Private A...

长平狐
2012/08/13
129
0

没有更多内容

加载失败,请刷新页面

加载更多

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
5
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部