• linux下使用gcc编译运行C/C++程序


    编译C 

    首先,程序编译过程有:

    1.预处理(展开宏,头文件,检查代码是否有误)

    2.编译(将.c转为汇编代码.s)

    3.汇编(将汇编代码.s转为机器代码.o)

    4.链接(将所有机器代码.o和库文件链接成一个可执行程序)

    一般编译常常包括了:预处理,编译,汇编

    在linux系统中,编译c使用gcc编译器,如下:

    gcc -o  out     in1.c    in2.c    //gcc编译以及链接(对in1文件和in2文件进行编译生成out.bin文件,“-o”:表示生成可执行文件)
    gcc -c    in1.c    in2.c   -o  out.o //gcc编译不链接(对in1文件和in2文件文件进行编译生成out.o文件,
    “-c”:表示只生成*.o文件 第二个"-o":表示制定生成哪个.o文件)

    (若只对单个文件编译及链接,也可以直接输入: gcc in.c, 系统默认编译生成a.out可执行文件)

    若需要在arm板里运行,就需要在linux系统中使用arm-linux-gcc交叉编译才行:

    arm-linux-gcc -o  out     in1.c    in2.c    //gcc编译以及链接(对in1文件和in2文件进行编译生成out.bin文件,“-o”:表示生成可执行文件)
    arm-linux-gcc -c   in1.c    in2.c  -o  out.o // gcc编译不链接(对in1文件和in2文件文件进行编译生成out.o文件,
    “-c”:表示只生成*.o文件 第二个"-o":表示指定生成哪个.o文件)
    -I      //表示添加头文件位置

     一般编译程序时,说找到不到某个头文件时,编译时直接加上"-I  该头文件目录",即可编译OK

    -l                     //指定库文件,l后面紧跟库文件,比如数学库:-lm,对应着libm.so文件,只需要去掉lib和.so即可

    编译程序时,一般说找不到某函数定义时,说不定就是没加库文件原因,比如找不到cos()函数定义,则编译时直接加上"-lm"即可 

    编译C++ 

    方法和上面类似,使用g++编译器,只不过该编译器会自动链接C++库 

    注意:若需要c++11标准,需要gcc 4.8以上


    以编译两个C文件(a.c和hello.c)为示例:

    vi a.c                                 //编辑a.c , 它将被hello.c调用,前提是这两个文件必须在同一目录下

    内容如下:

    vi hello.c                          //编辑hello.c

    内容如下:

     

    gcc -o hello  hello.c  a.c               //gcc编译以及链接(对hello.c文件和a.c文件进行编译生成hello.bin文件,“-o”:表示生成可执行文件)

    ./hello                                   //运行hello.bin

    效果如下所示:

     

  • 相关阅读:
    关于BindingSource的ListChange事件
    .Net 中Textbox控件的数据绑定
    Google Chrome OS Open Source Project Announcement
    ajax从基础开始
    如何处理Windows Forms程序中未处理的异常
    Chrome的一个bug? 大家看看
    Extjs学习笔记之二——初识Extjs之Form
    SQLite3简介及在.Net程序中的使用
    Extjs学习笔记之一——初识Extjs之MessageBox
    Extjs学习笔记之三——更多的表单项
  • 原文地址:https://www.cnblogs.com/lifexy/p/7404515.html
Copyright © 2020-2023  润新知