建议先安装build-essential. 使用

GCC

链接可分为动态链接和静态链接:

  • 动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行。动态链接生成的程序小巧,但是必须依赖动态库,否则无法执行。
  • Linux下的动态链接库实际是共享目标文件(shared object), 一般是.so 文件, 作用类似于 Windows 下的.dll 文件。
  • 静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过体积较大。
  • Linux 下静态库是汇编产生的.o 文件的集合,一般以.a 文件形式出现。
  • gcc 默认是动态链接,加上-static参数则采用静态链接.

编译时链接库文件

库文件一般为*.a或者*.so.

gcc *.c 库文件绝对路径

编译优化

注意开启优化后无法进行调试.

gcc -Os *.c

生成共享库文件

*.so

gcc -fpic -shared *.c -o lib*.so

make

基本语法

.PHONY:伪目标名
目标: 依赖文件
(TAB)生成目标执行文件的命令(gcc ...)

注释: 顶格#.

make clean

clean:
  -rm -r *

-rm中的-表示忽略报错.

自定义变量

同shell, 建议所有变量应用时候都用括号括起来, 比如$(VAR).

I/O

#include<sys/types.h> /* 定义数据类型,如 ssize_t,off_t 等 */
#include <fcntl.h> /* 定义 open,creat 等函数原型,创建文件权限的符号常量 S_IRUSR 等 */
#include <unistd.h> /* 定义 read,write,close,lseek 等函数原型 */
#include <errno.h> /* 与全局变量 errno 相关的定义 */
#include <sys/ioctl.h> /* 定义 ioctl 函数原型 */


software

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!