Using GCC’s C++ Compiler
2010-03-10 09:59
357 查看
http://www.sysab.cn/a/pro/linux_c/2009/1218/9097.html
Using GCC’s C++ Compiler
Using GCC’s C++ Compiler 本文讨论GNU编译器集合(GCC)中的C++编译器(g++)的典型用法,主要是指命令行选项的构造。GCC的C++编译器正常安装后,可以使用g++或c++命令执行。 GCC Option Refresher 本节回顾GCC的C编译器的基本使用方法。 g++编译器的选项Using GCC’s C++ Compiler 本文讨论GNU编译器集合(GCC)中的C++编译器(g++)的典型用法,主要是指命令行选项的构造。GCC的C++编译器正常安装后,可以使用g++或c++命令执行。 GCC Option Refresher 本节回顾GCC的C编译器的基本使用方法。 g++编译器的选项可以是单字符,比如-o,也可以多字符,比如-ansi。所以你不可以把多个单字符选项合写到一起,这和许多其他GNU和UNIX下的程序不同。例如,多字符选项-pg不表示2个单字符选项-p -g。选项-pg表示在最终的2进制文件里生成额外的代码,用来输出GNU code profiler的信息gprof;而选项-p -g则表示在目标2进制文件里生成额外的代码,用来产生prof code profiler需要的信息(-p),并在目标里加入调试信息(-g)。 既然g++把多字符的选项进行了区分,你就可以随意安排各个选项的顺序了。比如: g++ -pg -fno-strength-reduce -g myprog.c -o myprog 和 g++ myprog.c -o myprog -g -fno-strength-reduce -pg 是一样的。 一般情况下,这些选项的顺序是无所谓的。但是在有些情况下,顺序会变得重要,比如你多次使用同一类的选项。举个例子,-I选项指定了搜索include文件的目录,如果你用-I指定了多个目录,gcc会按照你指定目录的顺序搜索需要的文件。 用g++编译单个源文件myprog.cc很简单,只要把文件名当参数传给g++就行了。 $ g++ myprog.cc $ ls -l -rwxr-xr-x 1 wvh users 13644 Oct 5 16:17 a.out -rw-r--r-- 1 wvh users 220 Oct 5 16:17 myprog.cc 默认情况下,UNIX和LINUX操作系统生成的目标文件是当前目录下的a.out,只要输入./a.out就可以执行。在Cygwin系统下,你得到的是a.exe,通过输入./a或者./a.exe都可以执行。 要定义g++的输出文件名,使用-o选项如下所示: $ g++ myprog.cc -o runme $ ls -l -rw-r--r-- 1 wvh users 220 Oct 5 16:17 myprog.cc -rwxr-xr-x 1 wvh users 13644 Oct 5 16:28 runme 如果编译多个源文件,只要在命令行里列出它们就行了,如下所示,最终产生的输出文件是showdate: $ g++ showdate.cc helper.cc –o showdate 如果你想先编译这些源文件,最后再把它们链接成一个2进制文件,可以用-c选项,那么g++就只产生object文件,如下所示: $ g++ -c showdate.cc $ g++ -c helper.cc $ g++ showdate.o helper.o –o showdate $ ls -l total 124 -rw-r--r-- 1 wvh users 210 Oct 5 12:42 helper.cc -rw-r--r-- 1 wvh users 45 Oct 5 12:29 helper.h -rw-r--r-- 1 wvh users 1104 Oct 5 13:50 helper.o -rwxr-xr-x 1 wvh users 13891 Oct 5 13:51 showdate -rw-r--r-- 1 wvh users 208 Oct 5 12:44 showdate.cc -rw-r--r-- 1 wvh users 1008 Oct 5 13:50 showdate.o 注意 所有的GCC[b]编译器都是通过文件的后缀名来判断文件类型的,然后选择应该进行的操作(比如,后缀名为.o[b]的文件只需要进行链接),文件类型到操作的映射记录在GCC[b]的specs[b]文件里。在GCC[b]版本4[b]以前,specs[b]文件是标准文本文件,可以用任何文本编辑器修改;但是GCC[b]版本4[b]以后specs[b]文件是内建文件,必须要进行解压才能修改。[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b] 很显然,当你的项目文件稍微多点,使用命令行来编译就不可接受了,特别是还要加上搜索目录、优化选项和其他g++选项。解决的方案就是make,不过本文并不讨论它。 C++源文件扩展名 前面说过所有GCC编译器都通过文件后缀名来决定采用的操作。下表列出了g++认识的文件类型和相应的操作。 Suffix Operation .C C++ source code to preprocess. .cc C++ source code to preprocess. This is the standard extension for C++ source files. .cpp C++ source code to preprocess. .cxx C++ source code to preprocess .ii C++ source code not to preprocess. 如果一个文件的后缀名未知,那么就当成object文件进行链接。这并不是说你只能使用上表列出的文件名后缀来区分源代码文件和其他文件,你可以用-x lang选项指定一个或多个输入文件的代码类型,不使用标准的文件名后缀规则。lang参数指定代码的类型;对于C++,输入文件可以是c++(标准的C++源文件)或c++-cpp-output(已经被预处理过的C++源文件,不需再进行预处理)。 注意 当GCC[b]编译器遇到上表列出的文件后缀,它会当成C++[b]文件。但是,有些GCC[b]编译器(比如gcc[b])不能处理C++[b]程序里很复杂的依赖关系,比如复杂的类库,于是编译失败。所以你应该用g++[b](或c++[b])来编译C++[b]程序。[/b][/b][/b][/b][/b][/b][/b][/b] GCC的C++编译器的命令行选项 许多命令行选项对于GCC编译器家族都是通用的,下表只列出g++专有的命令行参数。 Option Description -fabi-version=n 指定编译代码需要符合的C++ ABI(application binary interface)版本。对于GCC版本3.4及更高,默认的ABI版本是2。 -fcheck-new 保证new操作返回的指针为非空。 -fconserve-space 把全局变量的初始化操作延迟到运行的时候,common segment里的全局变量不初始化,这样减少可执行文件的大小。 -fdollars-in-identifiers 允许标识符里出现$符号(默认)。 -fms-extensions 使g++忽略Microsoft Foundation Classes (MFC)中非标准用法的警告信息。 -fno-access-control 禁止访问检查 -fno-const-strings 强制g++把字符串常量的类型定义成char *,而不管ISO C++标准是否要求是const char *。 -fno-elide-constructors 强制g++总是调用copy构造函数,即使在用临时对象初始化另一个同类型对象的时候。 -fno-enforce-eh-specs 禁止在运行时检查异常处理违例。 -ffor-scope 对于for语句初始化部分申明的变量,限制其作用域是for循环以内。你也可以用-fno-for-scope选项强制其作用域为下一个‘}’之前,虽然这和ISO标准冲突,但是旧版本g++和许多其他传统的C++编译器都是这样做的。 -fms-extensions 禁止对Microsoft Foundation Classes代码的不必要的警告。 -fno-gnu-keywords 禁止把typeof作为一个关键字,这样就可以用它作为标识符使用,你仍可以使用__typeof__关键字来代替它。该选项被包含在
|
相关文章推荐
- (转载)Using GCC’s C++ Compiler
- Using GCC’s C++ Compiler
- Using GCC’s C++ Compiler
- Using GCC’s C++ Compiler
- Using GCC’s C++ Compiler
- Using GCC’s C++ Compiler
- Using GCC’s C++ Compiler
- Ubuntu11.10安装Qt,提示“You need a C++ compiler. Please install it using the System Pack
- Using Intel® C++ Compiler with the Eclipse* IDE on Linux*
- Atomic Builtins - Using the GNU Compiler Collection (GCC) GCC 提供的原子操作
- gcc - GNU project C and C++ compiler
- Installing GCC (C++ Compiler and Development Tools) - dnf - yum
- C/C++ tip: How to detect the operating system type using compiler predefined macros
- An Inline Function is As Fast As a Macro(《Using the GNU Compiler Collection (GCC)》)
- windows下使用vim(gVim)和gcc(MinGW):C/C++/Fortran/ObjC/Ada Compiler
- Using Boost C++ libraries with gcc g++ under Windows(cygwin+netbeans)
- win10安装MDK5时,出现the arm C/C++ compiler已停止工作如何解决
- using namespace std;//C++
- How to using eclipse to develpe C/C++
- Do not hybrid compile and link source code by using VC and GCC!