linux进入输入模式:
输入模式,可以编辑内容。按字母 i 进入输入模式 按esc进入命令模式
末行模式,退出时需要切换到末行。在命令模式下输入 : 进入末行模式
:wq 保存退出 :q! 强制退出不保存

当文件编译:
一步到位的编译命令
gcc test.c -o test

编译过程分为是个阶段进行=预处理->编译->汇编->链接
预处理:gcc -E test.c -o test.i或gcc -E test.c(插入头文件)
编译:gcc -S test.i -o test.s(生成汇编代码)
汇编:gcc -c test.s -o test.o(生成目标文件)(gas汇编器)
链接:gcc test.o -o test(生成可执行文件)(gas连接器)

静态连接库:lib_.a
动态连接库:lib_.so
二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

“.”当前目录,”..”上一级目录

Linux下面共享库默认路径是:/usr/lib. /usr/local/lib. /lib
linux头文件的默认路径是:/usr/include/

“<>”至系统默认路径,” “” “至当前路径

多个程序文件的编译:
gcc test1.c test2.c -o test
如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test

检错:
gcc -pedantic illcode.c -o illcode
发现一些不符合 ANSI/ISO C标准的代码,但不是全部

gcc -Wall illcode.c -o illcode
能够使GCC产生尽可能多的警告信息

gcc -Werror test.c -o test
将警告信息当成编码错误来对待

库文件连接:
gcc一般自动去默认的可找库,但是有时候还是要自己添加头文件和库文件的路径

例如我们的程序test.c是在linux上使用c连接mysql,这个时候我们需要去mysql官网下载MySQL Connectors的C库,下载下来解压之后,有一个include文件夹,里面包含mysql connectors的头文件,还有一个lib文件夹,里面包含二进制so文件libmysqlclient.so

其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是/usr/dev/mysql/lib

插入头文件并生成目标文件:
gcc –c –I /usr/dev/mysql/include test.c –o test.o

链接:
gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

强制链接时使用静态链接库:
GCC链接时默认使用动态链接库,加上-static选项,强制使用静态库
在/usr/dev/mysql/lib目录下有链接时所需要的库文件libmysqlclient.so和libmysqlclient.a为了让GCC在链接时只用到静态链接库,可以使用下面的命令:
gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

静态库链接时搜索路径顺序:

  1. ld会去找GCC命令中的参数-L
  2. 再找gcc的环境变量LIBRARY_PATH
  3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:

  1. 编译目标代码时指定的动态库搜索路径
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
  4. 默认的动态库搜索路径/lib
  5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径