zoukankan      html  css  js  c++  java
  • Linux学习笔记-基本操作3

    1. vim编辑器的使用
    2. gcc编译器
    3. 静态库的制作 -- lib
    4. 动态库的制作    -- dll


    vi -- vim
    vim是从vi发展过来的一款文本编辑器
    vi a.txt
    前提: 安装了vim软件

    工作模式:
        1. 命令模式 -- 打开文件之后, 默认进入命令模式
        2. 编辑模式 -- 需要输入一些命令, 切换到编辑模式
        3. 末行模式 -- 在末行模式下可以输入一些命令
        
        
        


    1. vim编辑器的使用


        命令模式下的操作:
            1>. 光标的移动
                H  J  K  L
                前 下 上 后
                行首: 0
                行尾: $
                文件开始位置: gg
                文件末尾: G
                行跳转: 300G
            2>. 删除操作
                    删除光标后边的字符: x
                    删除光标前边的字符: X
                    删除光标单词后面的: dw  (光标移动到单词的开始位置, 否只能删除一部分)
                    删除光标到行首的字符串: d0
                    删除光标到行尾的字符串: D(d$)
                    删除光标当前行: dd
                    删除多行: ndd (n -- 自然数)
            3>. 撤销操作
                        撤销: u
                        反撤销: ctrl + r
            4>. 复制粘贴
                    复制: yy
                    复制多行: nyy
                    
                    粘贴: p (光标所在行的下一行)
                    粘贴: P (光标所在行)
                    
                    剪切 == 删除
            5>. 可视模式
                    切换到可是模式: v
                    选择内容: hjkl
                    操作: 复制: y   删除: d
            6>. 查找操作
                    1). /hello(向下查找,到尾部返回头部)
                    2). ?hello(向上查找,到头部返回尾部)
                    3). # -- 把光标移动到查找的单词身上 , 按#
                    遍历时候的快捷键: N/n
            7>. r: 替换当前字符
            
            缩进:
                    向右: >>
                    向左: <<
            8>. 查看man文档 可以指定章节
                3 shift + k
        文本模式下的操作:
            切换到文本模式:
                a -- 在光标所在位置的后边插入
                A -- 在当前行的尾部插入
                
                i -- 在光标所在位置的前边插入
                I -- 在光标所在行的行首插入
                
                o -- 在光标所在行的下边开辟一个新的行
                O -- 在光标所在行的上边开辟一个新的行
                
                s -- 删除光标后边的字符
                S -- 删除光标所在的行
        末行模式下的操作:
            :
            行跳转  :123 -> 跳转到第123行
            替换一行  :s/abc/123 -> 将当前行中的第一个abc替换为123
                      :s/abc/123/g -> 将当前行中的abc全部替换为123
            替换全部  :%s/abc/123 -> 将所有行中的第一个abc替换为123
                      :%s/abc/123/g -> 将所有行中的abc全部替换为123
                      :10,30s/abc/123/g -> 将10-30行中的abc全部替换为123
            执行shell命令  末行模式里输入!,后面跟命令
            查找  :s/tom
            保存退出:
                    q: 退出
                    q!: 退出不保存
                    w: 保存
                    wq: 保存退出
                    x: == wq
        在命令模式下保存退出: ZZ
        末行模式分屏操作:
            1>. 水平分屏    :sp
            2>. 垂直分屏    :vsp
            3>. 命令:sp(vsp) + 文件名 水平或垂直拆分窗口显示两个不同的文件
            ctrl+ww 切换两个屏幕
            命令 :wq 保存并退出光标所在的屏幕
            命令 :wqall 保存并退出所有屏幕
            


    2. gcc编译器


            1>. gcc工作流程: gcc hello.c -o hello
                预处理器cpp:头文件展开,宏替换,注释去掉
                    gcc -E hello.c -o hello.i
                编译器gcc:C文件变成汇编文件
                    gcc -S hello.i -o hello.s
                汇编器as:汇编文件变成二进制目标文件
                    gcc -c hello.s -o hello.o
                链接器ld:将函数库组合到目标文件
                    gcc hello.o -o hello
            2>. gcc的一些参数使用
                    1). -I 指定头文件目录
                    2). -c 只编译子程序
                    3). -o 产生指定名字的目标文件
                    4). -D 编译时定义宏
                    5). -g 包含调试信息(gdb调试的时候必须加此参数)
                    6). -Wall 提示更多警告信息
                    7). -O 编译优化0到3 级别


    3. 静态库的制作


            1>. 命名规则
                    1). lib + 库的名字 + .a
                    2). libmytest.a
            2>. 制作步骤:
                    1). 生成对应的.o文件 -- .c --> .o   -c
                    2). 将生成的.o文件打包  ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o
            3>. 发布和使用静态库:
                    1). 发布静态库
                        生成的静态库需要跟对应的头文件同时发布
                    2). 头文件
                        gcc main.c lib/libMytest.a -I./ -o app
                        gcc + 源文件 + -L 静态库路径 + -l静态库名 + -I头文件目录 + -o 可执行文件名
                        gcc main.c -L./ -l Mytest -I./ -o app
                    3). 打包到程序的最小单位是.o
                nm libMytest.a  可以查看静态库包含的内容 (可执行文件也可以查看)
            4>. 优缺点:
                优点:寻址方便,速度快
                      库被打包到可执行程序中,直接发布可执行程序即可使用
                缺点:静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
                      如果静态库改变了,那么你的程序必须重新编译。


    4. 共享库的制作:(动态库)


            1>. 命名规则:
                    1). lib + 名字 + .so
            2>. 制作步骤:
                    1). 生成与位置无关的代码 (生成与位置无关的.o)参数 -fPIC 表示生成与位置无关代码 执行完毕后生成一系列的 .o 文件
                        gcc -fPIC -c a.c b.c c.c
                    2). 将.o打包成共享库(动态库)
                        gcc -shared -o libMytest.so a.o b.o c.o -I头文件目录
            3>. 发布和使用共享库:
                gcc main.c -L./ -l Mytest -I  include -o app
            4>. 解决程序执行时动态库无法被加载的问题:
                    ldd app 查询可执行程序在执行时所需依赖的所有共享库
                    发现没有给动态链接器(ld-linux.so.2)指定好动态库 libmytest.so 的路径
                    1). 复制到系统的库目录/lib/中 -- 不允许使用
                    2). 临时测试
                                环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量
                                将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH
                                当终端关闭, 设置会失效
                    3).    不常用的方法(永久设置):
                                在家目录的 .bashrc文件 中添加一句话: export LD_LIBRARY_PATH=动态库目录的绝对路径
                                .bashrc修改完成, 需要重启终端
                    4).    
                        1. 需要找动态连接器的配置文件 --  sudo vi /etc/ld.so.conf
                        2. 动态库的路径写到配置文件中 -- 绝对路径
                        3. 更新 -- sudo ldconfig -v(输出一些信息)
            5>. 优缺点:
                优点:节省内存(共享)
                      易于更新(动态链接)停止运行程序 使用新库覆盖旧库(保证新旧库名称一致,接口一致) “接口” 重新启动程序。
                缺点:延时绑定,速度略慢
                      发布时需要将动态库发布给用户

  • 相关阅读:
    又见博弈
    两道来自CF的题
    温习及回顾
    笔试面试总结
    Python Cha4
    初学ObjectiveC
    设计模式汇总(三)
    转贴XML的写法建议
    让从Objec中继承的类也拥有鼠标事件
    关于异常处理的一些看法
  • 原文地址:https://www.cnblogs.com/DA799422035/p/9031750.html
Copyright © 2011-2022 走看看