导航:首页 > 源码编译 > gcc编译指定as

gcc编译指定as

发布时间:2023-05-24 10:44:27

1. 怎样指定某个版本的gcc来编译程序

对于autotools来生成Makefile的程序包,不建亮轮议修改Makefile来指定GCC/G++的版本。
最佳方案:
./configure CC=你想使的C编译器的绝对路径
./configure CXX=你想使的C++编译器的绝对路径

比如:./configure CXX=/usr/local/bin/g++
这旁配样就可以很方便地让系统内多敬启信个版本的编译器共存了。

2. 如何用GCC在linux下编译C语言程序

在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器,假设我们有下面一个非常简单的源程序(hello.c):


int main(int argc,char **argv)


{


printf("Hello Linux ");


}


要编译这个程序,我们只要在命令行下执行:


gcc -o hello hello.c


gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程
序的输出结果了

3. 如何给GCC指定编译的地址

有两种办法
1. gcc D:\XXX\main.c 用这个命令来编译你的C文件,把上面的目录、文件换成你的。
2. 在CMD里,cd到D盘,然后cd到你的C文件目录下,执行gcc main.c即可

4. 如何指定GCC的默认头文件路径

看下文的红色部分。 有大量的环境变量可供设置以影响 GCC 编译程序的方式。利用这些变量的控制也可使用合适的命令行选项。一些环境变量设置在目录名列表中。这些名字和 PATH 环境变量使用的格式相同。特殊字符 PATH_SEPARATOR (安装编译程序的时候定义)用在目录名之间。在 UNIX 系统中,分隔符是冒号,而 Windows 系统中为分号。 C_INCLUDE_PATH 编译C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。 ==> 也见 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 COMPILER_PATH 该环境变量指定一个或多个目录名列表,如果没有指定 GCC_EXEC_PREFIX 定位子程序,编译程序会在此查找它的子程序。 ==> 也见 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行选项。 CPATH 编译C 、 C++ 和 Objective-C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -l 选项一样。会首先查找 -l 指定的所有目录。 ==> 也见 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 CPLUS_INCLUDE_PATH 编译C++ 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。 ==> 也见 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。 DEPENDENCIES_OUTPUT 为文件名设置该环境变量会让预处理程序将基于依赖关系的 makefile 规则写入文件。不会包括系统头文件名字。 如果环境变量设置为单名,被看作是文件名字,而依赖关系规则的名字来自源文件名字。如果定义中有两个名字,则第二个名字是用作依赖关系规则的目标名。 设置该环境变量的结果和使用命令行选项 -MM 、 -MF 和 -MT 的组合是一样的。 ==> 也见 SUNPRO_DEPENDENCIES 。 GCC_EXEC_PREFIX 如果定义了该环境变量,它会作为编译程序执行的所有子程序名字的前缀。例如,如果将变量设置为 testver 而不是查找 as ,汇编器首先会在名字 testveras 下查找。如果在此没有找到,编译程序会继续根据它的普通名进行查找。可在前缀名中使用斜线指出路径名。 GCC_EXEC_PREFIX 的默认设置为 prefix /lib/gcc-lib/ ,这里的 prefix 是安装编译程序时 configure 脚本指定的名字。该前缀也用于定位标准连接程序文件,包含进来作为可执行程序的一部分。 如果使用 -B 命令行选项,会重写该设置。 ==> 也见 COMPILER_PATH 。 LANG 该环境变量用于指出编译程序使用的字符集,可创建宽字符文字、串文字和注释。 定义LANG 为 C-JIS ,指出预处理程序将多字节字符按照 JIS (日语工业标准)字符进行解释。 C-SJIS 可用来指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。 如果没有定义 LANG ,或定义为不可识别,函数 mblen() 被用来确定字符宽度,而 mbtowc() 用来将多字节序列转换为宽字符。 LC_ALL 如果设置,该环境变量的值重写 LC_MESSAGES 和 LC_CTYPE 的所有设置。 LC_CTYPE 该环境变量指出引用串中定义的多字节字符的字符分类。主要用于确定字符串的字符边界,字符编码需要用引号或转义符,可被错误地解释为字符串的结尾或特殊字 符串。对 Australian English ,可将它设置为 en_AU ;对 Mexican Spanish ,可将它设置为 es_MX 。如果没有设置该变量,默认为 LANG 变量的值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。 LC_MESSAGES 该环境变量指出编译程序使用何种语言发出诊断消息。对 Australian English ,可设置为 en_AU ;对 MexicanSpanish ,可设置为 es_MX 。如果变量没有设置,使用 LANG 变量的默认值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。 LD_LIBRARY_PATH 该环境变量不会影响编译程序,但程序运行的时候会有影响。变量指定一个目录列表,程序会查找该列表定位共享库。只有当未在编译程序的目录中找到共享库的时候,执行程序必须设置该变量。 LD_RUN_PATH 该环境变量不会影响编译程序,但程序运行的时候会有影响。该变量在运行时指出文件的名字,运行的程序可由此得到它的符号名字和地址。地址不会重新载入,因而可能符号引用其他文件中的绝对地址。这和 ld 工具使用 -R 选项完全一样。 LIBRARY_PATH 该环境变量可设置为一个或多个目录名字列表,连接程序会搜寻该目录,以查找特殊连接程序文件,和由 -l (字母 l )命令行选项指定名字的库。 由 -L 命令行选项指定的目录在环境变量的前面,首先被查找。 ==> 也见 COMPILER_PATH 。 OBJC_INCLUDE_PATH 在编译 Objective-C 程序的时候使用该环境变量。一个或多个目录名的列表由环境变量指定,用来查找头文件,就好像在命令行中指定 -isystem 选项一样。所有由 -isystem 选项指定的目录会首先被查找。 S

5. GCC如何编译一个汇编文件,得到可执行文件

gcc -c my.s(生成my.o)
gcc -o my my.o
my就是所要的可执行文件
或者直接可以gcc -o my my.s

6. Linux下gcc编译介绍

Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面我们来介绍gcc所遵循的部分约定规则。
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
Gcc的执行过程
虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。
命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

Gcc的基本用法和选项
在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。Gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。
Gcc最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而对于B类,cpp在当前目录中搜寻头文件,这个选项的作用是告诉cpp,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。在程序设计中,如果我们需要的这种包含文件分别分布在不同的目录中,就需要逐个使用-I选项给出搜索路径。
-Ldirname,将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在连接过程中使用的参数。在预设状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的档案库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径中寻找,如果函数库存放在多个目录下,就需要依次使用这个选项,给出相应的存放目录。
-lname,在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库。
上面我们简要介绍了gcc编译器最常用的功能和主要参数选项,更为详尽的资料可以参看Linux系统的联机帮助。
假定我们有一个程序名为test.c的C语言源代码文件,要生成一个可执行文件,最简单的办法就是∶
gcc test.c
这时,预编译、编译连接一次完成,生成一个系统预设的名为a.out的可执行文件,对于稍为复杂的情况,比如有多个源代码文件、需要连接档案库或者有其他比较特别的要求,就要给定适当的调用选项参数。再看一个简单的例子。
整个源代码程序由两个文件testmain.c 和testsub.c组成,程序中使用了系统提供的数学库,同时希望给出的可执行文件为test,这时的编译命令可以是∶
gcc testmain.c testsub.c □lm □o test
其中,-lm表示连接系统的数学库libm.a。

Gcc的错误类型及对策
Gcc编译器如果发现源程序中有错误,就无法继续进行,也无法生成最终的可执行文件。为了便于修改,gcc给出错误资讯,我们必须对这些错误资讯逐个进行分析、处理,并修改相应的语言,才能保证源代码的正确编译连接。gcc给出的错误资讯一般可以分为四大类,下面我们分别讨论其产生的原因和对策。

第一类∶C语法错误
错误资讯∶文件source.c中第n行有语法错误(syntex errror)。这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,我们最主要的是要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。
第二类∶头文件错误
错误资讯∶找不到头文件head.h(Can not find include file head.h)。这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。

第三类∶档案库错误
错误资讯∶连接程序找不到所需的函数库,例如∶
ld: -lm: No such file or directory
这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。
第四类∶未定义符号
错误资讯∶有未定义的符号(Undefined symbol)。这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc连接选项中的-l和-L项。
排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是我们在使用C语言描述一个算法中所产生的错误,是比较容易排除的。我们写一个程序,到编译、连接通过为止,应该说刚刚开始,程序在运行过程中所出现的问题,是算法设计有问题,说得更玄点是对问题的认识和理解不够,还需要更加深入地测试、调试和修改。一个程序,稍为复杂的程序,往往要经过多次的编译、连接和测试、修改。下面我们学习的程序维护、调试工具和版本维护就是在程序调试、测试过程中使用的,用来解决调测阶段所出现的问题。窗体顶端
窗体底端

7. gcc编译问题

-c和-o都是gcc编译器的可选参数。-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。-o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序。

8. gcc的常用编译命令

gcc编译命令总结:
1.无选项
gcc test.c
默认生成可执行文件a.out
2.-o 生成的可执行文件名
gcc test.c -o test
3.多个文件一起编译
gcc test1.c test2.c -o test
4.-O选项
gcc -O1 test1.c -o test
作用:使用编译优化级别1编译程序,优化级别为1-3,级别越大优化效果越好,但编译时间越长
5 -g选项 :生成可调试信息
6.链接库的命令
gcc test.c -lm -o test
-lm 表示链接系统的数学库 libm.a

9. 如何指定GCC的默认头文件路径

看文红色部 量环境变量供设置影响 GCC 编译程序式利用些变量控制使用合适命令行选项些环境变量设置目录名列表些名字 PATH 环境变量使用格式相同特殊字符 PATH_SEPARATOR (安装编译程序候定义)用目录名间 UNIX 系统隔符冒号 Windows 系统号 C_INCLUDE_PATH 编译C 程序使用该环境变量该环境变量指定纤歼或目录名列表查找文件像命令行指定 -isystem 选项首先查找 -isystem 指毁薯冲定所目录 ==> 见 CPATH 、 CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH COMPILER_PATH 该环境变量指定或目录名列表没指定 GCC_EXEC_PREFIX 定位程序编译程序查找程序 ==> 见 LIBRARY_PATH 、 GCC_EXEC_PREFIX -B 命令行选项 CPATH 编译C 、 C++ Objective-C 程序使用该环境变量该环境变量指定或目录名列表查找文件像命令行指定 -l 选项首先查找 -l 指定所目录 ==> 见 C_INCLUDE_PATH 、手坦 CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH CPLUS_INCLUDE_PATH 编译C++ 程序使用该环境变量该环境变量指定或目录名列表查找文件像命令行指定 -isystem 选项首先查找 -isystem 指定所目录 ==> 见 CPATH 、 C_INCLUDE_PATH OBJC_INCLUDE_PATH DEPENDENCIES_OUTPUT 文件名设置该环境变量让预处理程序基于依赖关系 makefile 规则写入文件包括系统文件名字 环境变量设置单名看作文件名字依赖关系规则名字自源文件名字定义两名字则第二名字用作依赖关系规则目标名 设置该环境变量结使用命令行选项 -MM 、 -MF -MT 组合 ==> 见 SUNPRO_DEPENDENCIES GCC_EXEC_PREFIX 定义该环境变量作编译程序执行所程序名字前缀例变量设置 testver 查找 as 汇编器首先名字 testveras 查找没找编译程序继续根据普通名进行查找前缀名使用斜线指路径名 GCC_EXEC_PREFIX 默认设置 prefix /lib/gcc-lib/ prefix 安装编译程序 configure 脚本指定名字该前缀用于定位标准连接程序文件包含进作执行程序部 使用 -B 命令行选项重写该设置 ==> 见 COMPILER_PATH LANG 该环境变量用于指编译程序使用字符集创建宽字符文字、串文字注释 定义LANG C-JIS 指预处理程序字节字符按照 JIS (语工业标准)字符进行解释 C-SJIS 用指 Shift -JIS 字符 C-EUCJP 指文 EUC 没定义 LANG 或定义识别函数 mblen() 用确定字符宽度 mbtowc() 用字节序列转换宽字符 LC_ALL 设置该环境变量值重写 LC_MESSAGES LC_CTYPE 所设置 LC_CTYPE 该环境变量指引用串定义字节字符字符类主要用于确定字符串字符边界字符编码需要用引号或转义符错误解释字符串结尾或特殊字 符串 Australian English 设置 en_AU ; Mexican Spanish 设置 es_MX 没设置该变量默认 LANG 变量值或没设置 LANG 使用 C 英语行见 LC_ALL LC_MESSAGES 该环境变量指编译程序使用何种语言发诊断消息 Australian English 设置 en_AU ; MexicanSpanish 设置 es_MX 变量没设置使用 LANG 变量默认值或没设置 LANG 使用 C 英语行见 LC_ALL LD_LIBRARY_PATH 该环境变量影响编译程序程序运行候影响变量指定目录列表程序查找该列表定位共享库未编译程序目录找共享库候执行程序必须设置该变量

10. 如何设置gcc as-needed编译选项

Debug选项:在gcc编译源代码时指定-g选项可以产生带有调试信息的目标代码,gcc可以为多个不同平台上帝不同调试器提供调试信息,默认gcc产生的调试信息是为gdb使用的,可以使用-gformat指定要生成的调试信息的格式以提供给其他平台的其他调试器使用.常用的格式有-ggdb:生成gdb专用的调试信息,使用最适合的格式(DWARF2,stabs等)会有一些gdb专用的扩展,可能造成其他调试器无法运行.-gstabs:使用stabs格式,不包含gdb扩展,stabs常用于BSD系统的DBX调试器.-gcoff:产生COFF格式的调试信息,常用于SystemV下的SDB调试器;-gxcoff:产生XCOFF格式的调试信息,用于IBM的RS/6000下的DBX调试器;-gdwarf-2:产生DWARFversion2的格式的调试信息,常用于IRIXX6上的DBX调试器.GCC会使用DWARFversion3的一些特性.可以指定调试信息的等级:在指定的调试格式后面加上等级:如:-ggdb2等,0代表不产生调试信息.在使用-gdwarf-2时因为最早的格式为-gdwarf2会造成混乱,所以要额外使用一个-glevel来指定调试信息的等级,其他格式选项也可以另外指定等级.gcc可以使用-p选项指定生成信息以供porf使用.

阅读全文

与gcc编译指定as相关的资料

热点内容
linux命令cpu使用率 浏览:67
linux实用命令 浏览:238
传奇引擎修改在线时间命令 浏览:107
php取域名中间 浏览:896
cad命令栏太小 浏览:830
php开发环境搭建eclipse 浏览:480
qt文件夹名称大全 浏览:212
金山云服务器架构 浏览:230
安卓系统笔记本怎么切换系统 浏览:618
u盘加密快2个小时还没有搞完 浏览:93
小米有品商家版app叫什么 浏览:94
行命令调用 浏览:436
菜鸟裹裹员用什么app 浏览:273
穷查理宝典pdf下载 浏览:514
csgo您已被禁用此服务器怎么办 浏览:398
打开加密软件的方法 浏览:156
云存储服务器可靠吗 浏览:967
2核1g的云服务器能带动游戏嘛 浏览:898
逆命20解压码 浏览:146
徐州办犬证需要下载什么app 浏览:1002