Linux基础-vim/静态库/共享库

Ctrl + l 清屏指令 

Ctrl + Alt + T (ubuntu)创建终端

man和echo命令

man man 查看帮助文档首页

alias ls 查看ls实际执行的指令

alias pag='ps aux | grep' 可以临时打造一个pag 但是关掉终端后就无效了

ehco “hello linux” 显示一个字符串输出到终端上

env 查看当前进程的环境变量

echo $path 查看path的值 $就是取值符

vim的三种模式

vi和vim的区别:vim是从vi发展过来的一款文本编译器

工作模式:

        1.命令模式——打开文件之后 默认进入命令模式

        光标的移动 H J K L 前 下 上 后

        光标移动到行首: 0           光标移动到行尾: $

        光标移动到当前文件头部: gg      文件末尾:G       行跳转:300G

        删除光标后面的字符:x       删除光标前面的字符: X         撤销:u  反撤销: Ctrl + r

        删除光标后面的一个单词: dw     删除当前行光标前面的内容:d0

        删除当前行光标后面的内容: d$或者D   删除光标所在的行:dd                                                            从当前行开始删除之后的4行: 4dd 

        2.编辑模式——需要输入一些命令 切换到编辑模式

        3.末行模式——在末行模式下可以输入一些命令

vim中的复制和粘贴

ndd 不仅仅是删除 也是剪切 (n是行数)

P 从当前行开始粘贴       p 从下一行开始粘贴

yy 复制当前行 nyy 复制多行

v 进入可视模式 然后就可以选中一些文本 通过上下左右调整 想复制就是y 想删除就是d

在文本中查找一个特定的字符串:

        在命令模式下 输入/hello 然后所有文本中的hello就会以黄色高亮显示出来 在这些高亮的hello中切换就按n 或者 N

        如果我想查一下一个单词出现了多少次 就把光标移动到单词身上 按一下# 然后单词就变成了黄色高亮 切换就按n 或者 N

r + 一个字符 可以替换一个字符

向右缩进 >>    向左缩进 <<

章节号 + shift + k 可以查man文档函数定义

命令模式切换到文本模式

a 开始从光标的后面开始插入内容

A 跳到当前行尾部开始插入内容

i 开始从光标的前面开始插入内容

o 在光标所在行下创建了新的一行开始插入内容

O 在光标所在行上创建新的一行开始插入内容

s 删除光标后边一个字符 然后开始插入内容

S 删除光标所在行一整行 然后开始插入内容

末行模式相关操作

只能从命令模式切换到末行模式——输入一个冒号 :

:300 跳转到300行

/originString 查到originString字符串

:s/originString/newString  把光标所在行的第一个originString替换成newString

:s/originString/newString/g  把光标所在行的所有originString替换成newString

:%s/originString/newString/g  把文件所有originString替换成newString

:27,30s/originString/newString/g  把27到30行的originString替换成newString

:!pwd 把当前的路径输出到终端

:!ls 把当前路径的内容输出到终端

:w 保存文件

:q 退出文件

:q! 退出不保存

:wq 保存并退出    (或者在命令模式下按两次大写的Z)

vim的分屏操作

:sp 水平分屏当前文件

Ctrl + w + w 在命令模式下切换屏幕

:q 关掉光标所在屏幕

:qall 关掉两个屏幕

:vsp 垂直分屏当前文件

:vsp hello.c 垂直分屏另一个文件

vim的配置文件

vim可以打造成IDE

系统级配置文件目录 /etc/vim/vimrc     (支持所有用户)

用户级配置文件目录 ~/.vim/vimrc

配置vimrc可以实现类似于每次进入vim时都有行号 背景色 文本颜色等一些修改

gcc的编译过程和参数

Linux基础-vim/静态库/共享库_第1张图片

 如果直接一步编译到位 gcc hello.c -o myapp 其本质也是执行了上面的三步 只是没有生成中间文件

gcc hello.c 也是可以的 默认会生成一个a.out

⚠️:.c文件包含的.h文件必须在同一目录下 不然找不到                                                                       但是可以直接指定头文件目录 gcc hello.c -I ./include -o myapp   (注意这里是大写的i 后面指定头文件目录) 

gcc hello.c -o myapp -D DEBUG 指定了一个宏 相对于执行程序的时候有了一个宏定义

gcc hello.c -o myapp -O3 最大程度优化代码                                                                                       例如 :

int a = 10;
int b = a;
int c = b;
int d = c;

//优化过后

int d = 10;

gcc hello.c -o myapp -Wall 可以输出警告信息

gcc hello.c -o myapp -g 增加一些调试信息(gdb调试的时候需要)

静态库的制作和使用

使用静态库可以不发给客户源代码 只发给客户一个静态库和头文件就能执行程序

1.命名规则
        1) lib + 库的名字 + .a                 
        2) libmytest.a

2.制作步骤
        1)生成对应的.o文件     .c ----->.o     -c
        2)将生成的.o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o

3.发布和使用静态库
        1)发布静态库
        2)  头文件

开发端:
cd src 首先进入源文件目录 这里都是.c文件
gcc *.c -c -I../include  这里是把所有.c文件替换成.o (二进制文件)     -I是定义头文件目录
ar rcs libMyCalc.a *.o 生成静态库
mv libMyCalc.a ../lib  把刚生成的静态库放到上级目录里的lib库中 
客户端:
这时就可以把include头文件和lib库发给用户了 然后用户写了一个main.c测试静态库中的加法运算
gcc main.c lib/libMyCalc.a -o sum -I ./include
gcc main.c -I ./include -L lib -l MyCalc -o sum
和上面效果一样

静态库的优缺点

nm libMyCalc.a 可以查看静态库的内容

Linux基础-vim/静态库/共享库_第2张图片

静态库的优点:
1.发布程序的时候 不需要提供对应的库 因为已经被打包到可执行文件了
2.库的加载速度快

缺点:
1.库被打包到应用程序中 导致库的体积很大
2.库发生了改变 需要重新编译程序

共享库的制作 

1.命名规则
        1)lib + 名字 + .so

2.制作步骤
        1)生成与位置无关的代码 (生成与位置无关的.o)
        2)将.o打包成共享库(动态库)

cd src 进入源文件目录
gcc -fPIC -c *.c -I../include 生成与位置无关的.o文件 加-fPIC 
gcc -shared -o libMyCalc.so *.o -I ./include 生成共享库
mv libMyCalc.so ../lib 移到到上一级目录的lib

共享库的使用

gcc main.c lib/libMyCalc.so -o app -I ./include 客户生成可执行文件

gcc main.c -I ./include -L ./lib -l MyCalc -o app 和上面效果一样

ldd myapp 查看可执行文件执行的时候依赖的所有共享库

Linux基础-vim/静态库/共享库_第3张图片

动态链接器是按照环境变量来找动态库的

解决动态库链接失败的问题

临时导入环境变量测试(关掉终端会失效):
echo $LD_LIBRARY_PATH 加载库的时候如果没有配置环境变量 那么就可以配置在这里环境变量内 它会在默认的环境变脸之前先进行调用
export LD_LIBRARY_PATH=./lib 给这个额外配置的动态库环境变量赋值

永久的设置:
vi .bashrc 在家目录下打开.bashrc
在文件的最后一行加上export LD_LIBRARY_PATH=/home/itcast/day03/Calc/lib
⚠️:需要重启终端才能生效

最常用的设置方式:
1.需要找动态链接器的配置文件——动态库的路径写到配置文件中
2.更新 —— sudo ldconfig -v

具体步骤:
cd /etc 
sudo vi ld.so.conf 如果没有修改过只有第一行内容 在下面创建新的一行
在文件中加上/home/itcast/day03/Calc/lib 这时本地动态库的路径 保存退出
sudo ldconfig -v 更新
接下来切换到工作目录day03下的Calc
ldd myapp 就能看到是可以链接到文件配置的绝对路径

动态库的优缺点

动态库的优点:
1.执行程序体积比较小
2.动态库更新不需要重新编译程序 前提是接口没变

缺点:
1.发布程序的时候 需要将动态库提供给用户
2.动态库没有被打包到应用程序中 加载速度相对较慢

        

你可能感兴趣的:(Linux,linux,vim)