回忆昨天的内容
一、什么是操作系统
计算机的操作系统是一款管理计算机资源的软件,
计算机资源包括硬件资源和软件资源。
系统软件 应用软件

二、计算机语言的发展史
机器语言  汇编语言 C语言
预处理  编译  汇编  链接  加载

今天内容
一、大型项目的代码组织
    规则 约定
    头文件内容:
        1头文件卫士#ifndef....
        2函数的声明
        3文件的包含
        4宏定义
        5类型的定义
        6变量的声明 int val;extern int val;
    变量的声明和定义的区别
        变量的定义是为变量分配空间的,变量的声明是变量的空间已经存在,扩充变量的作用域。
   
编写代码 实现工程
代码参见 pmath文件夹
编译的基本单位是源文件,编译的时候,在检查程序是不是符合C语言的语法
nm 二进制文件
查看二进制文件中的符号表
符号表 存放的是程序中的符号     函数的名字,全局变量的名字,静态局部变量的名字
目标文件 可重定位的目标文件
file 文件名  查看文件类型

链接发生在生成可执行文件的时候 静态链接
动态链接 发生在程序执行的时候
 
二、静态库的制作和使用
    函数库 仓库文件里存放的是多个函数
    根据函数库中函数链接的方式,分为静态库和动态库
    静态库的命名规则   lib+库名.a
    静态库的制作步骤:
    1 将要加入静态库的源文件编译为目标文件

2 将这些目标文件加入到静态库文件中,创建静态库文件
    ar -r libt_math.a *.o
    3 使用静态库文件链接生成可执行文件
        gcc mailou.o -Lpmath -lt_math
        -L路径 链接器到这个路径下找库文件
        -l库名  指定要链接的库的名字
        系统指定路径 -I路径 将路径添加到系统指定路径

三、环境变量的初识
    环境变量跟进程相关,进程的环境变量
    程序和进程的关系
    程序是计算机指令的集合,存储在硬盘
    进程是正在运行的程序,存储在内存
    一个程序运行一次产生一个进程,进程实际上是程序执行过程中对计算机资源使用情况的描述
    进程是程序运行的实例
    每个进程都有自己的身份证   pid
   
    bash进程的环境变量和自定义变量
    如何查看bash进程的环境变量env
    USER=tarena
    格式:name=value
    =号两边绝对不允许空格
    如何获取一个环境变量的值呢?
    $name 取环境变量name的值
    echo字符串 将字符串输出到显示器          
    echo $USER 将环境变量USER的值输出到显示

怎么改变环境变量的值
    name=newvalue
   
    如何增加一个环境变量
        1、增加一个自定义变量
        name=value
    补充:管道,
        grep 字符串 文件名 在文件中查找字符串,将包含字符串的行全部显示出来。
        command1|command2   command1的标准输出是command2的标准输入
        env|grep USER
        2、将自定义变量变为环境变量
        export 变量名

PATH    export PATH=$PATH:.
  vi ~/.bashrc打开环境变量 ,用户可以在里面修改

PS1 指定shell的提示符   PS1=“\W\$”只显示最后一个文件夹
   
    ~   用户的家目录

四、动态库的制作和使用
    一、制作和使用的步骤
    1、将要加入的动态库的源文件编译为目标文件(与位置无关)
        gcc -c *.c -fPIC
    2、将第一步生成的目标文件,打包进动态库中
        gcc -shared -o libt_math.so *.o
    3、使用动态库生成可执行文件
        gcc mailou.c -Lpmath -lt_math
    4、运行啊.out
        动态库也叫共享库
        加载器 加载a.out到内存执行的之后,需要加载a.out依赖的动态库文件
        如何查看a.out依赖哪一些动态库
            ldd a.out
        此时需要让加载器找到动态库
            1 使用环境变量告诉加载器的搜索路径
                LD_LIBRARY_PATH=pmath
                export LD_LIBRARY_PATH
                或者export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
            LD_LIBRARY_PATH    有很多的路径,这些路径是加载器找动态库的路径
            2 加载器和链接器默认的路径是/lib或者/usr/lib,可以将动态库剪切到该路径
    二、动态加载
        在程序执行过程中,需要加载某个动态库的时候,向动态链接器发送加载所需动态库的请求。动态链接器加载动态库。这个就是动态加载。
        动态链接器也是一个程序,要和程序通讯,了解和动态连机器通讯的接口就可以
        dlopen(3) dlclose(3) dlerror(3) dlsym(3)

  • mailou.c
#include<stdio.h>
#include"pmath/tmath.h"int main(void){int a=6,b=2;printf("%d+%d=%d\n",a,b,t_add(a,b));printf("%d*%d=%d\n",a,b,t_mul(a,b));printf("%d/%d=%d\n",a,b,t_div(a,b));printf("%d-%d=%d\n",a,b,t_sub(a,b));return 0;
}
  • tmath.h
#ifndef T_MATH_H_
#define T_NATH_H_int t_add(int,int);
int t_sub(int,int);
int t_mul(int,int);
int t_div(int,int);#endif
  • add.c
#include"tmath.h"
int t_add(int x,int y){return x+y;
}
int t_div(int x,int y){return x/y;
}int t_sub(int x,int y){return x-y;
}
int t_mul(int x,int y){return x*y;
}

Ubuntu下UnixC的第二天相关推荐

  1. Ubuntu下安装Apache+PHP+Mysql

    Ubuntu下安装 apache+php+mysql文本服务器! ------------------------------------------------------------------- ...

  2. ubuntu下关于 undefined reference to 'pcap_flex'错误 以及 无法导入/找到libpcap.so.1错误...

    第一个错误: 这个错误和libpcap的安装有关系,出现这个错误,建议,libpcap的依赖就绪以后 make clean sudo make unistall 然后,重新编译安装 第二个错误: 在/ ...

  3. linux pureftp mysql_在Ubuntu下安装apache2+php5+mysql5+pureftp+ftp

    在Ubuntu下安装apache2+php5+mysql5+pureftp+ftp 一.安装Ubuntu7.04 Desktop版 二.ubuntu Linux下手工安装mysql5 1.下载mysq ...

  4. Ubuntu下常用但是我容易忘记的命令总结(未完待续)

    写在前面的话 这个主要是写给自己看的,还是用的少了,哎,弱啊. 1.文件的归档处理 1.1 zip命令和unzip命令 zip 命令: $ zip test.zip test.txt 它会将 test ...

  5. 搭建Ubuntu下c/c++编译环境【转】

    1.       安装Ubuntu. 2.       安装gcc 方法一: sudo apt-get  install  build-essential 安装完了可以执行 gcc--version的 ...

  6. ubuntu下man帮助文档不全怎么办?如何解决?

    真心后悔用ubuntu学习linux 发现很多东西不全,kate没有,vi版本低,帮助文档不全一系列的问题.ubuntu下man帮助文档不全怎么办?如何解决?不用担心,下边小编就为大家带来最详细的解决 ...

  7. 【转载】ATI显卡在Ubuntu下设置方法(很全面)

    [转载]ATI显卡在Ubuntu下设置方法(很全面) //终于看到了一个解决ATI显卡在linux的解决方法,先转载一个. 原文地址:http://forum.ubuntu.com.cn/viewto ...

  8. ubuntu下安装wine

    直接在终端里面输入"sudo apt-get install wine"不要引号,即可安装wine.至于使用它,终端命令就是"wine ...."举个例子,你现 ...

  9. Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建

    Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建 1. 前言 2. 安装三个Ubuntu 2.1 三个机器都关闭防火墙 2.2 三个机器都关闭swap 2.3 三个机器都 ...

最新文章

  1. java内部类人打电话依赖手机_Java内部类及反射类面试问题,90%的人都不知道
  2. Redis通信协议(protocol)
  3. Python继承外另一种重用方式——组合
  4. opendds开发指南中文版_最强的开发者技术路线图已经更新到 2020 GitHub 超 118k还有中文...
  5. conda 安装mysql_centos7安装mysql
  6. C# mysql 链接 遇到 异常 Authentication with old password no longer supported, use 4.1 style passwords....
  7. 理解setState(),异步还是同步?
  8. 延时执行和取消延时执行
  9. recv函数阻塞_socket缓冲区以及阻塞模式详解
  10. hadoop启动HDFS命令
  11. 信捷PLC XD/XL系列C语言功能块的应用
  12. CAM365|超高性价比CAM软件推荐
  13. Java实现附近地点搜索
  14. 盯盯拍CEO 罗勇现身云栖大会 畅谈车联网生态并发布全新产品mini3
  15. 5G+AI+大数据+IoT如何改变一切?
  16. Tcp为什么是4次挥手呢?为什么是3次握手,不能是3次挥手呢?
  17. IPTV和OTT概念,这几个你必须知道
  18. 基于采样的路径规划算法RRT和代码实现
  19. 【Java锁体系】ReadWriteLock读写锁是什么?什么是读写锁
  20. 技术手段VBA之爬虫

热门文章

  1. 查看Linux服务器内存大小,cpu个数,型号
  2. 什么是计算机嵌套分类汇总,Excel中插入分类汇总的嵌套级别的方法图解详细教程...
  3. 【华人学者风采】毛景文 中国地质科学院
  4. 阿里巴巴:今年营收 5000 亿,明年GMV要再增一万亿
  5. 数据库三种概念模型——层次模型,网状模型,关系模型的优缺点总结
  6. 超键、候选键、主键和外键的区别和联系
  7. 如何查询linux的系统版本
  8. springboot集成
  9. 建模simulink - xpc自定义模块设置
  10. 个人深度学习keras环境配置介绍