`
liujun58love
  • 浏览: 14860 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux下使用gcc编译c文件入门

阅读更多
最近有项目用到在linux上使用gcc编译c源程序的工作,于是针对这块做了一些整理,列出

使用gcc在linux下编译c的一些最基础指令

gcc -[command] c文件名称 -o 生成文件别名

command(指令)--

       W----(warning警告)
      
       例如: gcc -Wall hello.c -o hello

       -version (查看当前gcc版本)

       例如:gcc --version

       
       gcc -help(查看帮助)
 
       例如:gcc --help    


       gcc -Wall file1 file2 ... -o outfilename (gcc 编译多个文件)

       注:头文件是不需要进行编译的

       例如:gcc -Wall one.c two.c three.c -o liujun


linux 系统头文件一般放在/usr/include 或者是 /usr/local/include

       include<> 与 include "" 区别是

       include "" 是现在当前目录下查找对应的包含文件,如果没有才会到系统目录去查找对应的头文件

       include <> 是直接到系统目录下去查找对应的头文件,不会在当前目录查找头文件

       
        gcc -v  filename   显示出gcc编译以及链接的所有信息

        例如: gcc -Wall -v hello.c -o hello

        gcc -c filename  将当前文件编译成一个目标文件(但不连接)

        例如 gcc -Wall -c hello.c (生成一个以扩展名为.o的目标文件)


        gcc filename.o filename1.o -o targetFile  将生成的目标文件进行合并成一个可执行文件

        例如:gcc one.o two.o -o hello


        linux 标准库路径 /usr/lib  and /lib
         

        gcc -Wall filename.c /path/file.a  -o targetfilename.o  链接编译外部库

        例如: gcc -Wall main.c /usr/lib/libm.a -o calc

    
        1.gcc -Wall main.c /usr/lib/libm.a -o calc
               
        2.gcc -Wall main.c -lm -o calc 

        注:第二个命令与第一句的文件名是相同的,使用 -l 表明当前文件是一个库文件

         且是以lib为前戳的。


        gcc -I path   告诉编译器在指定的path目录下查找头文件

        例如: gcc -Wall main.c -I/usr/opt

        gcc -L path   告诉编译器在指定的path目录下查找库文件


        ar cr libname.a  file1.o file2.o file3.o ... filen.o

       将单独的目标文件(.o)文件 整合成一个库文件(名字叫libname.a),一般程序

        在与库文件进行结合调用使用

        例如: ar cr libhello.a fun1.o fun2.o

        ar t libname.a  查看当前libname.a库中由多少个目标文件生成

        gcc -Wall  main.c libname.a(o) -o hello  将一个目标文件与一个库文件

        编译生成一个库文件(顺序必须先写调用文件在写库文件)

        gcc -Wall  main.c -L/usr/opt -lhello -o liujun  在/usr/opt目录

        下查找文件名是libhello.a的库文件

        共享库默认加载库目录

        /usr/local/lib  和 /usr/lib  设置LD_LIBRARY_PATH改变共享加载库路径


        gcc -Wall -ansi hello.c -o hello (-ansi 使用标准的c进行编译)

        gcc -Wall -DTEST hello.c -o hello (-D 相当于在程序中的#define TEST)

        cpp -dM /dev/null  (查看gcc中系统内置定义的宏)

     编译程序需要执行四个步骤:
      
       1.预编译:
        cpp main.c > main.i  (将文件main.c文件中包含的头文件的内容加载进当前

        main.i这个文件当中,这就是预编译阶段)

       2.编译转化为汇编语言
       
        gcc -Wall -S main.c (将文件 main.c文件中的内容转化成汇编语言)

       3.生成目标文件

        as main.s -o main.o

       4.链接目标文件到一个可执行文件(包含链接系统头文件库,程序中使用到的静态库或者动态库)

         gcc main.o
       

      file file.o 查看文件信息

        ldd main   查看可执行文件main所依赖的库(main文件必须是可执行文件)
分享到:
评论

相关推荐

    linux操作系统下C语言编程入门 gcc编译

    linux操作系统下C语言编程入门 gcc编译 gdb调试技术 实例演示

    linux下gcc编译器的简易入门

    介绍了gcc编译器中-o、-c、-Wall等常用选项(参数)的用法,并结合一个实例,详细介绍了gcc编译多个文件生成可执行文件的过程。

    Linux编译工具:gcc入门

    1. 什么是gcc?  gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。...而gcc编译出来的程序能够在其他平台进行运行。例如嵌入式程序可在x86上编译,然后在arm上运行。  

    GCC 入门剖析以及嵌入式汇编

    介绍了linux下的编译器gcc的基本原理,以及嵌入式汇编编译的过程

    嵌入式Linux C编程入门(第2版) PPT

    2.3.2 gcc编译流程分析 42 2.3.3 gcc警告提示 45 2.3.4 gcc使用库函数 47 2.3.5 gcc代码优化 49 2.4 嵌入式linux调试器gdb的使用 49 2.4.1 gdb使用实例 50 2.4.2 设置/删除断点 53 2.4.3 数据...

    Linux-基础入门-学习笔记(2):交叉编译工具链与Makefile

    Linux-基础入门-学习笔记(2):交叉编译工具链与Makefile 一、安装交叉编译工具链 1. windows和linux下装软件的特点 windows下装软件的特点 Windows中装软件使用安装包,安装包解压后有2种情况:一种是一个安装文件...

    Ubuntu设置gcc_g++_make输出颜色高亮 - Linux系统教程1

    红联Linux门户|Linux通用技术|Linux发行版技术|Linux企业应用|Linux实验室|红联Linux论坛Linux系统教程Linux入门Linux

    Linux从零入门实战-2019年七月Z线.txt

    第一阶段 Linux快速入门掌握Linux的常用操作命令 第一讲 Linux介绍 知识点1: Linux发展简史与黑客文化 知识点2: 安装Linux系统, 以Ubuntu虚拟机为例 知识点3: 购买Linux云主机,以阿里云主机为例 知识点4: Linux...

    详解GCC的下载和安装

    GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。本文将告诉读者如何下载并按照GCC。

    嵌入式Linux应用程序开发标准教程(第2版全)

    3.1.2 Linux下C语言编程环境概述 3.2 常用编辑器 3.2.1 进入vi 3.2.2 初探emacs 3.3 gcc编译器 3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理...

    Linux应用系统开发及系统调试.txt

    linux系统入门学习 教程简介 Linux应用系统开发及系统调试视频教程共75讲,主要讲解了GNU开发环境基础、Linux高级程序、Linux进程管理、进程间通信、线程、网络编程、HTTP原理、Socket内 核跟踪等内容,全套教程...

    嵌入式Linux应用程序开发详解

    3.1.2 Linux下C语言编程环境概述 62 3.2 进入Vi 63 3.2.1 Vi的模式 63 3.2.2 Vi的基本流程 63 3.2.3 Vi的各模式功能键 65 3.3 初探Emacs 66 3.3.1 Emacs的基本操作 67 3.3.2 Emacs的编译概述...

    An Introduction to GCC(含中文翻译)

    对于想要快速入门GCC,或者想使用GCC进行一些简单的编译的话,这个文档很恰当。

    linux驱动学习去开发入门

    obj-m := hello.o 代表了我们要构造的模块名为hell.ko,make 会在该目录下自动找到hell.c文件进行编译。如果 hello.o是由其他的源文件生成(比如file1.c和file2.c)的,则在下面加上(注意红色字体的对应关系): ...

    ARM-LINUX交叉编译环境建立

    绝对原创,参考李亚锋老师的ARM嵌入式Linux系统开发从入门到精通这本书,但是书中有很多错误,而且写得不够详细,这个是绝对详细,每一步骤都有截图,不会linux的也能够建立起arm 开发环境。

    linux下socket编程简单echo实例(c)

    实际中会发现编译是可以通过的,但是不能使用,gdb跟踪发现port被赋值0,后看sin_port类型可以看到是short int型,因此这句应改为: serv_addr.sin_port = htons(LISTEN_PORT); 编译: gcc -o echo echo.c 后运行:...

    嵌入式linux操作系统入门培训

    1.Linux操作系统结构;常用的Linux Shell命令 2.开发环境使用 3.编译器GCC使用 4.实验:设置编译环境;

    基础的Linux常用命令

    gcc -o 1 1.c //将1.c编译成.exe文件,我们可以用此命编译出代码。 8.chmod 命令 权限修改 用法:chmod 一位8进制数 filename。 eg: chmod u+x filenmame //只想给自己运行,别人只能读 //u表示文件主人, g 表示...

    Linux之V4L2基础编程(直接读取和内存映射)

    交叉编译工具链:atm-linux-gcc 4.3.2 qt版本:QtEmbedded-4.5.2-arm 我最近在Tiny6410进行摄像头的编程时,从网上找了大量的资料进行了学习,可是效果并不好,因为网上的资料大部分都不是很详细,假如给有过V4L2...

Global site tag (gtag.js) - Google Analytics