Linux编程环境(Linux网络编程笔记)01
Linux环境下的编译器
vim的使用简介:
1.vim的安装:
使用命令:apt-get install +软件包名
可以用来安装各种软件
2.vim编译器的模式:
Vim主要分为普通模式和插入模式。普通模式是命令模式,插入模式是编辑模式。
再插入模式下可以进行字符的输入,输入的键值显示在编辑框中,这些文本可以用于编辑。普通界面是进行命令操作的,输入的值代表一个命令。
插入模式和普通模式的切换分别为按i键和Esc键。普通模式下按i键会进入插入模式。插入模式下按Esc键进入普通模式。
使用Vim建立文件
- 建立文件:
使用命令:vim +文件名
可以建立一个新的文件并打开。 - 进入插入模式:
打开文件后,按i进入插入模式。vim会在底部显示“–INSTERT–”,表示当前模式为插入模式。 - 退出vim,当编译完成之后,按Esc返回普通模式,之后输入":wq"退出vim编辑器。
使用vim编辑文本
- 移动光标:h,j,k,l
h:左,l:右,j:下,k:上。 - 删除元素x,dd,u,Ctrl+R
x是删除光标所在的单个字符
dd是删除光标所在行
Ctr+R是一个特殊命令,他的作用是将内存中的字符赋值到所在光标位置之后。 - 复制粘贴p,y.
粘贴命令为p,y命令是复制。 - 查找字符串"/".
查找字符串的格式是" /XXX ",其中XXX代表的是待查找的字符串
输入字符”n“进入到下一个检索到的字符串,输入”N“进入到上一个检索字符串 - 跳到某一行G
数字+G
Linux下的GCC编译器工具及集
介绍
- GCC是Linux下的编译工具集,不仅可以编译c/c++语言,还可以编译Objective-c,Pascal
等语言 - GCC的c编译器为gcc,其命令格式为
Usa: gcc [options] file...
- 文件拓展名的含义:
- GCC编译器含义
GCC编译器命令 | 含义 |
---|---|
cc | 指的是C语言编译器 |
cpp | 指的是预处理编译器 |
gcc | 指的是C语言编译器 |
g++ | 指的是c++语言编译器 |
编译程序的基本知识
- 编译器一般对程序有四个编译阶段:
预编译—编译和优化—汇编—链接
文件 | 作用 |
---|---|
源文件 | 存放可编辑代码的文件 |
目标文件 | 经过编译器编译生成的CPU可识别二进制代码 |
可执行文件 | 目标文件与相关的库链接后的文件 |
单个文件编译为可执行文件
- 直接使用gcc命令加上需要编译的文件名
gcc + 文件名 | 可直接编译为可执行文件 |
---|---|
./ +文件名 | 执行可执行文件 |
gcc -0 +名称+文件名 | 生成指定文件名的可执行文件 |
编译生成目标文件
命令 | 功能 |
---|---|
gcc -c +文件名 | 生成目标文件 |
gcc -c -o +,名称 +文件名 | 生成指定名字的目标文件 |
gcc -c+多个文件名 | 同时编译多个目标文件 |
生成 .o 文件
预处理
使用命令
gcc -E +文件名.c
生成 .i 文件
编译为汇编语言
使用命令
gcc -S +文件名.c
生成 .s 文件
生成和使用静态链接库
静态库是一个obj文件的合集,通常静态库是以“.a"为后缀。
静态库的优点:
** 可以在不用重新编译程序库代码的情况下,进行程序的重新链接,这种方法节省了编译过程的时间。
** 开发者可以提供库文件给使用的人员而不用开放源代码,这是库函数提供者常用的手段。
1.生成静态链接库
创建静态库的最基本步骤是生成目标文件,然后使用工具ar对目标文件进行归档。工具ar的-r选项可以创建库,并把目标文件插入到指定库中。其命令为:
ar -rcs +名称.r +目标文件
- 使用静态链接库
在编程时常常需要使用库函数,例如C标准库等。GCC链接时使用库函数和一般的obj文件的形式是一样的,例如使用main.c进行连接时,需要使用已经编译好的静态链接库libstr.a,命令格式如下:
$gcc -o test main.c libstr.a
也可以使用”-l 库名"命令进行,库名是不包含函数库和拓展名的字符串。例如编译main.c链接静态库libstr.a的命令可以修改为:
$gcc -o test main.c -lstr
上面的命令将会在系统默认的路径下查找str函数库,并把它链接到要生成的目标程序去。可能系统会提示无法找到库文件str,这是由于由于str库函数没有在系统默认的查找路径下,需要显示指定库函数的路径,例如库函数和当前编译文件在同一目录下:
$gcc -o test main.c -L./ -lstr
注意:
在使用-l选项时,-o选项的项目名称要在-l链接的库名称之前,否则GCC会认为-l时输出目标而出错。
**===**会有更新…