指点成金-最美分享吧

登录

mac下的gcc如何使用。。

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了mac下的gcc如何使用。。相关的知识,希望对你有一定的参考价值。

我装的是xcode4.2.1.
我搜索/usr/bin/gcc,找到了llvm-gcc-4.2 llvm-g++-4.2等好几个东西,我双击,提示没用合适的应用程序打开。。我找到的是gcc编译器吗?如果是,怎么用?如果不是,怎么找,找到怎么用?

参考技术A gcc常用命令行
gcc/g++在执行编译工作的时候,总共需要以下几步:
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]
3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
/**********GCC能够处理的后缀有:**********/
a. *.c *.C (C语言)
b. *.cxx *.cc (C++语言)
c. *.m (面向对象的C)
d. *.i (预处理后的C语言源文件)
e. *.ii (预处理后的C++语言源文件)
f. *.s *.S (汇编语言)
h. *.h (头文件)
/**********目标文件可以是:**********/
a. *.o 编译连接后的目标文件
b. *.a 库文件

-o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out.
-c 只编译不链接
-IDIRNAME 将DIRNAME加入到头文件的搜索目录列表中
-LDIRNAME 将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库
-lFOO 链接名为libFOO的函数库
-O 优化编译过的代码
-ON 指定代码优化的级别为N,o<=N<=3
-v 显示在编译过程的每一步中用到的命令
-x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,
如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,
除非到了下一个参数的使用。例 gcc -x c hello.pig
-x none filename 关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型
   例:gcc -x c hello.pig -x none hello2.c
-c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
   例:gcc -c hello.c 他将生成.o的obj文件

-o 制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它!
  例子用法
  gcc -o hello.exe hello.c (哦,windows用习惯了)
  gcc -o hello.asm -S hello.c

-Idir 在你是用#include”file”的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,
他回先在你所制定的目录查找,然后再按常规的顺序去找.对#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找
-I- 就是取消前一个参数的功能,所以一般在-Idir之后使用
-idirafter dir 在-I的目录里面查找失败,讲到这个目录里面查找.
-iprefix prefix
-iwithprefix dir 一般一起使用,当-I的目录查找失败,会到prefix+dir下查找
-nostdinc 使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置
-nostdin C++ 规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库使用
-C 在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的
-M 生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下。
-MM 和上面的那个一样,但是它将忽略由#include造成的依赖关系。
-MD 和-M相同,但是输出将导入到.d的文件里面
-MMD 和-MM相同,但是输出将导入到.d的文件里面
-Wa,option 此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序
-Wl.option 此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.
-llibrary 制定编译的时候使用的库
   例子用法 gcc -lcurses hello.c 使用curses库编译程序
-Ldir 制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。
-O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 
-g 只是编译器,在编译的时候,产生调试信息。
-gstabs 此选项以stabs格式声称调试信息,但是不包括gdb调试信息.
-gstabs+ 此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.
-ggdb 此选项将尽可能的生成gdb的可以使用的调试信息.
-static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行.
-share 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统有动态库.
-traditional 试图让编译器支持传统的C语言特性追问

饿,这么多命令。。。我最大的不理解是,在哪里输入这些命令。。求问

参考技术B 例如你写了一个叫test.c的代码,使用方法是gcc test.c就可以了追问

在哪输gcc test.c?我有看到资料有提到命令行之类的。。
是双击LLVM-gcc-4.2吗,我试过,发现打不开。
还是在终端之类的地方打开?

追答

是的,是终端。如果是学开发的话,将来很多东西都要在终端下面完成的。如果你有时间的话,你可以学一下unix shell。不过shell和shell还是有一些不一样的。Mac OS继承与FreeBSD,你可以找一些这方面的书来看。我当时是看的《鸟哥的Linux私房菜--基础篇》,这本书是讲linux,不过跟MacOS差别不是很大,大多数的shell以及系统还是比较类似的。

本回答被提问者采纳
参考技术C xcode附带的gcc是llvm版,功能不全,要自己装个gnu版gcc

强制mac使用GCC,而不是clang

【中文标题】强制mac使用GCC,而不是clang【英文标题】:Force mac to use GCC, not clang 【发布时间】:2017-11-19 13:11:07 【问题描述】:

我有一个用 GNU C 在 Linux 上编写的程序。该程序使用 GCC 编译。我有一个安装 shell 脚本,

gcc -o program program.c -Wall -pedantic -std=gnu11 -lm -fopenmp

效果很好。

问题出在 Mac 上。出于某种原因,Mac 看到 gcc 而是使用 clang,即使安装了 GCC 并且 install.sh 明确表示 gccclang 不适用于omp.h 问题是clang 不能使用omp.h 并且提供的解决方案http://releases.llvm.org/3.7.0/tools/clang/docs/ReleaseNotes.html#openmp-support 不起作用,omp.h 可能在mac 中根本不起作用Enable OpenMP support in clang in Mac OS X (sierra)

我从不使用 mac,因为这些废话,我从不打算使用。但是,有些使用我的程序的人想使用 Mac,所以我必须处理这个问题。

我尝试了各种shell脚本修改,但都不起作用,mac坚持使用clang不会使用gcc

我需要做两件我不知道该怎么做的事情之一:

1) 强制 Mac 使用 gcc(它现在拒绝这样做)

2) 让clang 在 mac 中使用 omp.h(从 Stack Overflow 上的其他答案看来是不可能的)

【问题讨论】:

你说“即使安装了 GCC”...你是在哪里以及如何安装它的? 这里是如何强制Apple的clang使用OpenMP ***.com/a/47230419/3419533 【参考方案1】:

您的第二个选项(让 clang 使用 omp.h)并非不可能(不再)。从我的回答here:

尝试使用Homebrew的llvm:

brew install llvm

然后你就拥有了/usr/local/opt/llvm/bin 中的所有 llvm 二进制文件。例如,要编译OpenMP Hello World program,请键入

/usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib omp_hello.c -o hello

您可能还需要将CPPFLAGS 设置为-I/usr/local/opt/llvm/include

【讨论】:

以上是关于mac下的gcc如何使用。。的主要内容,如果未能解决你的问题,请参考以下文章