欢迎来到天天文库
浏览记录
ID:37853453
大小:29.00 KB
页数:8页
时间:2019-06-01
《Linux下用gcc编译c程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux下用gcc编译c程序GCC支持了许多不同的语言,包括C、C++、Ada、Fortran、ObjectiveC,Perl、Python和Ruby,甚至还有Java。 Linux内核和许多其他自由软件以及开放源码应用程序都是用C语言编写并使用GCC编译的。 编译C++程序: -c只编译不连接 g++file1-c-ofile1.o g++file2-c-ofile2.o g++file1.ofile.o-oexec g++-ca.cpp编译 g++-oaa.o生成可执行文件 也可以g++-oaa.cpp直接生成
2、可执行文件。 1.编译单个源文件 为了进行测试,你可以创建“HelloWorld”程序: #include #include intmain(intargc,char**argv) { printf(“Helloworld!”); exit(0); } 使用如下命令编译并测试这个代码: #gcc-ohellohello.c #./hello Hellowordl! 在默认情况下产生的可执行程序名为a.out,但你通常可以通过gcc的“-o”选项来指定自己的可执行程序
3、名称。 2.编译多个源文件 源文件message.c包含一个简单的消息打印函数: #include voidgoodbye_world(void) { printf(“Goodbye,world!”); } 使用gcc的“-c”标记来编译支持库代码: #gcc-cmessage.c 这一过程的输出结果是一个名为message.o的文件,它包含适合连接到一个较大程序的已编译目标代码。 创建一个简单的示例程序,它包含一个调用goodbye_world的main函数 #include4、b.h> voidgoodbye_world(void): intmain(intargc,char**argv) { goodbye_world(); exit(0); } 使用GCC编译这个程序: #gcc-cmain.c 现在有了两个目标文件:message.o和main.o。它们包含能够被Linux执行的目标代码。要从这个目标代码创建Linux可执行程序,需要再一次调用GCC来执行连接阶段的工作: #gcc-ogoodbyemessage.omain.o 运行编译结果: #./goodbye Good5、bye,world! 前面这些单独的步骤也可以简化为一个命令,这是因为GCC对如何将多个源文件编译为一个可执行程序有内置的规则。 #gcc-ogoodbyemessage.cmain.c #./goodbye Goodbye,world! 3.使用外部函数库 GCC常常与包含标准例程的外部软件库结合使用,几乎每一个Linux应用程序都依赖于由GNUC函数库GLIBC。 应用外部函数库的例子: #include #include #include #define6、MAX_INPUT25 intmain(intagrc,char**argv) { charinput[MAX_INPUT]; doubleangle; printf(“Givemeanangle(inradians)==>”); if(!fgets(input,MAX_INPUT,stdin)){ perror(“anerroroccurred.”); } angle=strtod(input,NULL); printf(“sin(%e)=%e”,angle,sin(angle)); return0; 7、 } 编译命令: #gcc-otrig-lmtrig.c GCC的”-lm”选项,它告诉GCC查看系统提供的数学库(libm)。因为Linux和UNIX的系统函数库通常以”lib”为前缀,所以我们假设它存在。真正的函数库位置随系统的不同而不同,但它一般会位于目录/lib或/usr/lib中,在这些目录中还有数以百计的其他必需的系统函数库。 4.共享函数库与静态函数库 Linux系统上的函数库分为两种不同的类型:共享的和静态的 静态函数库:每次当应用程序和静态连接的函数库一起编译时,任何引用的库函数中的代码都会被直接包含进最8、终的二进制程序。 共享函数库:包含每个库函数的单一全局版本,它在所有应用程序之间共享。这一过程背后所涉及的机制相当复杂,但主要依靠的是现代计算机的虚拟内存能力,它允许包含库函数的物理内存安全地在多个独立用户程序之间共享
4、b.h> voidgoodbye_world(void): intmain(intargc,char**argv) { goodbye_world(); exit(0); } 使用GCC编译这个程序: #gcc-cmain.c 现在有了两个目标文件:message.o和main.o。它们包含能够被Linux执行的目标代码。要从这个目标代码创建Linux可执行程序,需要再一次调用GCC来执行连接阶段的工作: #gcc-ogoodbyemessage.omain.o 运行编译结果: #./goodbye Good
5、bye,world! 前面这些单独的步骤也可以简化为一个命令,这是因为GCC对如何将多个源文件编译为一个可执行程序有内置的规则。 #gcc-ogoodbyemessage.cmain.c #./goodbye Goodbye,world! 3.使用外部函数库 GCC常常与包含标准例程的外部软件库结合使用,几乎每一个Linux应用程序都依赖于由GNUC函数库GLIBC。 应用外部函数库的例子: #include #include #include #define
6、MAX_INPUT25 intmain(intagrc,char**argv) { charinput[MAX_INPUT]; doubleangle; printf(“Givemeanangle(inradians)==>”); if(!fgets(input,MAX_INPUT,stdin)){ perror(“anerroroccurred.”); } angle=strtod(input,NULL); printf(“sin(%e)=%e”,angle,sin(angle)); return0;
7、 } 编译命令: #gcc-otrig-lmtrig.c GCC的”-lm”选项,它告诉GCC查看系统提供的数学库(libm)。因为Linux和UNIX的系统函数库通常以”lib”为前缀,所以我们假设它存在。真正的函数库位置随系统的不同而不同,但它一般会位于目录/lib或/usr/lib中,在这些目录中还有数以百计的其他必需的系统函数库。 4.共享函数库与静态函数库 Linux系统上的函数库分为两种不同的类型:共享的和静态的 静态函数库:每次当应用程序和静态连接的函数库一起编译时,任何引用的库函数中的代码都会被直接包含进最
8、终的二进制程序。 共享函数库:包含每个库函数的单一全局版本,它在所有应用程序之间共享。这一过程背后所涉及的机制相当复杂,但主要依靠的是现代计算机的虚拟内存能力,它允许包含库函数的物理内存安全地在多个独立用户程序之间共享
此文档下载收益归作者所有