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