专栏首页m0w3ngcc编译器

gcc编译器

一、gcc编译器

编译器:把文件经过处理,生成对应的可执行文件。

//test.c文件:

X86平台上面:

  gcc编译器,可以在x86平台上面运行。

ARM平台上面的:

  arm-linux-gcc

  交叉编译器:在一个平台编译生成可执行文件,在另外一个平台运行可执行文件。

  例如windows下面的keil就是一个交叉编译器。

#include <stdio.h>

void main(){
    printf("hello world!\n");
}

gcc编译

gcc main.c -o main

例子:

下面以一个很简单的 main.c 来探讨这个过程。

#include <stdio.h>
#define NUM 3

int main(){
    int t;
    #if 0
    printf("hello world\n");
    #endif  
    t = NUM;
    printf("t=%d\n",t);
      
    return 0;
}

(1) 预处理:gcc -E main.c -o main.i。

我们用cat查看main.i的内容如下:

 (2) 编译:gcc -S main.i -o main.s

 (3) 汇编:as main.s -o main.o

      nm main.o

 (4) 链接:gcc -o main  mian.o

二、多个文件的编译

  如果仅仅只有一个文件,直接:gcc main.c -o main.o

  但是如果你的程序是使用模块化编程的,又该怎么处理?

demo文件如下:

sequence.h

#ifndef _SEQUENCE_H_
#define _SEQUENCE_H_

void sequence(unsigned char*sp,unsigned char num);

#endif

sequence.c

#include "sequence.h"void sequence(unsigned  char *sp,unsigned char num)
{
    unsigned char i,j;
    unsigned char a;
    for(j=0;j<num-1;i++)
    {
        for(i=j+1;i<num;i++)
        {
            if(sp[j]>sp[i])
            {
                a=sp[i];
                sp[i]=sp[j];
                sp[j]=a;
            }
        }
    }     
}

main.c

#include <stdio.h>
#include "sequence.h"

unsigned char dis_num[8] = {10,9,17,92,2,8,35,12};

int main(void)
{
    unsigned char i;
    sequence(dis_num,sizeof(dis_num));
    for(i=0;i<8;i++)printf("%d ",dis_num[i]);
    printf("\r\n");
    return 0;        
}

处理如下:

gcc -o sequence.o -c sequence.c
gcc -o main.o -c main.c
gcc -o main sequence.o main.o
./main

三、Linux的静态库和动态库

  上面2个文档:sequence.c、sequence.h 可以做出库的形式,让其他的文件调用。

  库:可以分为静态库.a和动态库.so;

  静态库:会把库相应的编译到你的可执行文件里面;

  动态库:不会编译到可执行文件里面,只有在执行时会调用库的内容。

1、先制作静态库:

gcc -o sequence.o -c sequence.c
ar crsv libsequence.a sequence.o
gcc -o main main.c -L./ -lsequence -I./
./main 

 2、制作动态库:

gcc -fPIC -Wall -c sequence.c -o sequence.o
gcc -shared -o libsequence.so sequence.o

gcc -o main main.c -L./ -lsequence
sudo cp libsequence.so /lib   #拷贝
或者
#gcc -o main main.c -L./ -Wl,-rpath,${PWD} -lsequence  #指明路径

./main

后面 Makefile工程管理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GCC 编译器的使用

    视频观看地址:https://www.100ask.net/detail/p_5f338ae3e4b075dc42ad44a1/8

    韦东山
  • GCC编译器的-std选项

    GCC支持在编译的时候使用-std选项来选择编译语言的标准。程序本身也是在发展的,不断变化的。以 C 语言为例,发展至今该编程语言已经迭代了诸多个版本,例如 C...

    zy010101
  • GCC编译器基本使用方法

    版权声明:本文为博主原创文章,转载请注明博客地址: ...

    zy010101
  • 如何在 Ubuntu 18.04 上安装 GCC 编译器

    The GNU Compiler Collection (GCC) 是一系列编译器的集合,它包括 C,C++,Objective-C, Fortran, A...

    雪梦科技
  • 如何在 CentOS 7 上安装 GCC 编译器

    The GNU Compiler Collection (GCC) 是一系列编译器的集合,它包括 C,C++,Objective-C, Fortran, Ada...

    雪梦科技
  • Ubuntu下如何更快地安装gcc编译器

    最近操作系统开始上实验课了,瞟了一眼实验目录,看到了“gcc”的字样,一下子勾起了不好的回忆。记得上学期上计组的时候,曾经尝试在自己电脑的虚拟机上安装 gcc ...

    Chor
  • 四两拨千斤,GCC编译器(同余模) - HDU 3123

    同余这一属性看起来简单,然而却是数论中极为重要的概念。与之相关的公式和定理更是纷繁芜杂,如果不是数学背景的童鞋,恐怕很难深入去钻研所有的知识。

    ACM算法日常
  • 用Eclipse开源IDE+gcc编译器开始嵌入式编程

     最近有个项目,不能在Keil uVision4 MDK中开发,只能在linux下并使用命令行的GCC编译器,手动写makefile,对于习惯了IDE的开发者...

    独行猫A
  • 在 Windows 下用 GCC 编译器练习 C/C++ 的简单教程

    2018年8月更新: 这个暑假博主和小伙伴、老师一同为师弟师妹们折腾了一个关于计算机学习交流的小社区 0xFFFF ,经过一个暑假的积淀,留下了不少适合计算机入...

    zgq354

扫码关注云+社区

领取腾讯云代金券