linux C编程(一)gcc的用法

一.编译环境搭建

C/C++的编译环境:make工具,编译器gcc,调试器gdb,C/C++标准库。常用库信息列表build-essential包含gcc,g++,make,libc6-dev等写程序时基本会用到的工具,因此只安装build-essential,gcc,make等工具也会自动安装。不清楚的话全部都apt-get即可。

sudo apt-get install gdb build-essential

装完以后,查看gcc,make,gdb等版本

bryant@bryant:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.3' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)

bryant@bryant:~$ make -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu


本文重点讲述gcc


二.g++与gcc的区别

gcc,全称:GNU Compile Collection,是一组编译器集合,可以编译c,c++,object-c,java等。其功能是实现一个源代码文件向可执行文件的转换。

g++等效于 gcc -xc++ -lstdc++ -shared -libgcc

其中-x选项是指定gcc编译器的编译语言,由上述等价关系可知,

gcc对于不同的文件,可根据其后缀名采用不同编译规则,如.c,.cpp文件,而g++是将所有文件都当做c++来进行编译

由上述可知只需要gcc即可


三.细说gcc

gcc的对于hello.c编译流程分为四部分:

(1)预处理(Pre-Processing) hello.c -> hello.i 替换宏及头文件等

(2)编译(Compile) hello.i -> hello.s  将.c代码转为汇编代码

(3)汇编(Assembler) hello.s ->hello.o 将汇编代码转为二进制代码,该二进制代码中可能会引用其他.c或库里的函数,但是只是一个标志,没有具体的位置

(4)链接(Link) hello.o -> hello 将hello.o里引用的其他地方的函数和其他.c文件对应的.o全部链接为一个科执行文件


在链接外部库的时候有两种方式,一种是链接动态库.so(shared object),一种是静态库.a(Archive),gcc -static 此选项会禁止使用动态库,因此编译完后的文件一般会比较大,运行时也不需要动态库;gcc -share将尽量使用动态库,生成文件较小,但运行时会需要动态库。


在指定-llib编译源文件时,默认为shared参数,即默认为查找lib.so的共享库,编译时不讲lib链接进去;若显式指定-static参数,则首先查找lib.a静态库,然后编译时将静态库里的函数链接进去!


其余常用gcc选项:


-c 激活前三步,生成.o文件 如gcc -c hello.c

-o 指定目标名称,如gcc -c hello.c -o hello.o

-Wall 显示警告信息

-O0 -O1 -O2 -O3 编译器的优化选项,-O0表示没有优化,-O1为default值,-O3优化级别最高


-llibrary 指定链接时使用library库,如gcc  hello.c -o hello -lcurses 表示将hello.c编译链接为hello可执行文件,且链接的库使用libcurses.so库

-Ldir 指定链接时寻找库文件的路径,否则gcc只会在默认的几个路径中寻找库(如/usr/lib等),一般用在使用自己的库或者第三方库时会使用

-include file指定编译某个.c时包含file头文件,其功能相当于在.c前端#include file

-Idir 指定编译某个.c时先在dir文件夹里寻找头文件,然后再去默认目录寻找

linux默认系统路径

头文件:/usr/include/  /usr/local/include/

库文件:/usr/lib/  /usr/local/lib/


-Dmacro 在编译该文件时定义macro宏

-Dmacro=defn 在编译该文件时定义macro宏=defn

-Umacro 在编译该文件时undef macro


-x language filename 设定文件所使用的语言,language可为c,c++等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Linux C编程一站式学习》是由宋劲杉编写的一本关于Linux C编程的教材,主要介绍了Linux系统下C语言的基础知识和常用编程技巧。这本教材以文章简洁明了、逻辑性强、实例丰富等特点而受到广大编程学习者的欢迎。 《Linux C编程一站式学习》首先从Linux环境的搭建开始,介绍了Linux操作系统的基本概念和架构,包括文件系统、进程管理、内存管理等方面的知识。随后,教材详细介绍了C语言的基本语法、数据类型、运算符等内容,帮助读者建立起对C语言的基本理解。 接下来,教材介绍了Linux下的C编程工具和开发环境,包括GCC编译器、Makefile文件、调试工具等,使读者能够顺利地进行C程序的编译和调试。同时,还提供了大量的实例代码和实践项目,帮助读者通过实际操作加深对C语言和Linux编程的理解。 此外,《Linux C编程一站式学习》还专门介绍了Linux下的网络编程、多线程编程、进程间通信等高级主题。这些内容有助于读者深入了解Linux系统的底层机制和编程技巧,提升自己的编程能力。 总而言之,《Linux C编程一站式学习》是一本系统全面介绍Linux下C编程的教材,适合初学者和有一定编程基础的读者阅读。通过学习此书,读者能够掌握Linux环境下的C语言编程技能,为进一步深入学习和应用打下坚实的基础。 ### 回答2: 《Linux C编程一站式学习》是由宋劲杉编写的一本关于Linux C编程的教材。该书主要针对初学者,通过系统地介绍Linux系统、C语言及相关编程知识,帮助读者快速入门并掌握Linux C编程。 这本书共包含七个章节,分别是Linux的基础知识、Linux常用命令、Linux系统编程基础、C语言基础、C语言高级特性、Linux C编程实例和Makefile的使用。 在第一章的基础知识部分,作者详细介绍了Linux操作系统的历史、特点以及常见的发行版。第二章中,读者将学习到如何使用常用的Linux命令进行文件操作、目录管理以及常见的文本处理任务。 第三章和第四章分别介绍了Linux系统编程的基础知识和C语言的基础知识。在这两章中,读者将学习到如何使用系统调用、文件I/O、进程控制和信号处理等Linux系统编程的关键技术,同时也将学会C语言的基本语法、数据类型、函数等知识。 第五章则深入讲解了C语言的高级特性,包括指针、内存管理、结构体、位运算等。这些知识对于理解和编写复杂的C程序非常重要。 第六章和第七章给出了一些实例,通过实际的代码演示如何使用Linux C编程进行文件操作、进程间通信、网络编程等。 此外,《Linux C编程一站式学习》还介绍了Makefile的使用,这是一个用于自动化编译和构建项目的工具,对于更加高效地管理和组织C程序非常有用。 总之,通过阅读《Linux C编程一站式学习》,读者可以全面了解Linux系统、C语言和相关编程知识,并通过实例的演示掌握Linux C编程的技巧和方法,是一本非常实用的学习资料。 ### 回答3: 《Linux C编程一站式学习》是宋劲杉先生所著的一本关于Linux下C编程的书籍。这本书以实例为基础,讲解了Linux下C编程的各个方面,涉及了C语言基础知识、Linux系统调用、进程管理、线程编程、文件操作等内容。 书籍以通俗易懂的语言和丰富的实例详细介绍了C语言的基本语法和开发环境的搭建,对初学者非常友好。在讲解Linux系统调用时,通过介绍进程管理、线程编程以及进程间通信等内容,帮助读者深入理解Linux操作系统的原理和机制。 值得一提的是,书中重点讲解了gcc编译器的使用方法和调试技巧,使读者能够更好地理解和掌握C语言程序的编译和调试过程。此外,书中还介绍了常见的Linux工具和库函数,如make、gdb、pthread等,帮助读者提高开发效率和代码质量。 总体来说,《Linux C编程一站式学习》是一本非常实用的Linux C编程入门教材。通过阅读本书,读者可以系统地学习并运用C语言进行Linux下的程序开发。无论是新手入门还是有一定经验的开发者,都可以从中受益。此外,书籍中的实例代码也可以帮助读者进一步加深对C语言的理解和应用。 推荐这本书给对Linux C编程感兴趣的读者,它会成为你学习和掌握Linux下C编程的良好指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值