zoukankan      html  css  js  c++  java
  • Linux下C语言编程

    安装gcc

    sudo apt update
    sudo apt install build-essential
    gcc --version

    gcc的常用命令

    gcc -c

    gcc -o

    gcc -o program program.c -L. -lfoo   // -L.表示在当前目录下查找函数库

    ar crv : 将两个.o文件合并成一个库函数文件

    nm命令: 查看那些函数包含在目标文件, 函数库或可执行文件

    ldd命令: 查看一个可执行程序所需要的共享库

    (base) asgter@asgter-TM1613:~/Linux/C/funclib$ ldd program
        linux-vdso.so.1 =>  (0x00007ffe2cfb8000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6b74d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fdd6bb17000)

    C语言的3种格式

    1 .c或.h 结尾的文件就是字符串形式的文本

      .c 结尾的文件中带有main函数的, 是程序会执行的文件; 不带main的就是函数库文件了

      .h 结尾的文件, 是前面.c文件定义的函数的函数声明

    2 .o 结尾的文件就是二进制字节, 其中可能把引用的头文件添加到二进制字节中了

    3 可执行程序, 是将.o文件与所引用的库函数文件(也是.o结尾的) 合并到一起, 形成一个可执行文件

      gcc -o 可以直接将.c结尾的文件 转成可以 ./ 执行的文件

      gcc -c 将.c结尾的文件转成.o结尾的文件

    Linux下编写C语言程序

    第一种方式:

    1. vim fred.c  //  fred.c是一个函数定义文件

        vim lib.h     // fred.c中定义的函数的函数声明, 这是一个头文件

     vim program.c       // main函数所在的c文件, main中要include lib.h

    2. gcc -c fred.c  // 将fred.c编译成.o (本质上就是把头文件中的函数声明加进来)

        gcc -c program.c

    3. gcc -o program program.o bill.o  // 将main主程序和库函数链接到一起, 形成可执行文件program

    第二种方式:

    1. vim fred.c vim bill.c //  fred.c和bill.c是函数定义文件

        vim lib.h     // fred.c中定义的函数的函数声明, 这是一个头文件

     vim program.c       // main函数所在的c文件, main中要include lib.h

    2. gcc -c fred.c  // 将fred.c编译成.o (本质上就是把头文件中的函数声明加进来)

     gcc -c bill.c

    3. ar crv libfoo.a bill.o fred.o    // 将两个.o文件合并成一个.a的函数库文件

    4. gcc -o program program.o libfoo.a    // 生成可执行文件

    静态库与共享库

    静态库: .a结尾的文件

    当你同时运行许多应用程序并且他们都使用来自用一个函数库的函数时,

    内存中就会有同一函数的多份副本, 而且在程序文件自身中也有多份同样的副本

    静态库对应Windows中的.LIB文件

    共享库: .so结尾的文件

    共享库的保存位置与静态库一样,但共享库是.so结尾的

    Linux中, 标准数学库的共享版本是/usr/lib/libm.so

    共享库对应与Windows中 的.DLL文件

    共享库的使用机制:

    当一个程序使用共享库时, 程序本身不再包含函数代码, 而是引用运行时可访问的共享代码.

    当编译好的程序被装在到内存中执行时, 函数引用被解析并产生对共享库的调用,

    如果有必要, 共享库才被加载到内存

  • 相关阅读:
    MYSQL索引
    MYSQL 外键 on语句 多表查询
    MYSQL用户管理
    MYSQL数据类型 表基本操作 表记录增删改 单表查询
    JQuery 引用方式
    JQuery 元素操作 each循环
    Android EditText方框验证码 短信验证码攻略
    android MVP模式介绍与实战
    一些不错的Android开源音视频播放器
    Android可伸缩布局-FlexboxLayout(支持RecyclerView集成)
  • 原文地址:https://www.cnblogs.com/draven123/p/11406762.html
Copyright © 2011-2022 走看看