GCC的C编译器是gcc,其命令格式为:
gcc [options] file...
编译示例:
$gcc hello.c
$gcc –o test hello.c
选项-o可以使编译程序生成指定文件名
-c选项用于生成目标文件,示例:
$gcc –c hello.c
编译多个文件,示例:
$gcc –c file1.c file2.c file3.c
多文件编译
1.源文件string.c
2.源文件main.c
3.编译运行
$gcc -o test string.c main.c
预处理
预处理过程将源文件中的头文件包含进源文件中,并且将文件中定义的宏进行扩展
选项-E告诉编译器进行预编译操作,示例:
$gcc –E string.c
生成汇编
选项-S生成汇编语言,示例:
$gcc –S string.c
静态链接库和动态链接库
静态库是obj文件的一个集合。
静态库以.a为后缀
由ar生成
语法:
ar 库文件 obj文件1 obj文件2
示例:
将string.o打包为库文件libstr.a的命令为
$ar –rcs libstr.a string.o
使用静态链接库
示例:
$gcc –o test main.c libstr.a
动态链接库
动态链接库是程序运行时加载的库
别名:lib+库名+.so
真名:别名+小版本号+发行版本
链接名:链接时使用
1.生成动态链接库
-fPIC选项或者-fpic选项
示例:
$gcc –shared –Wl,-soname,libstr.so –o libstr.so.1 string.c
2.动态链接库的配置
指定系统的动态链接库搜索的路径
配置文件/etc/ld.so.conf
3.动态链接库管理命令
4.使用动态链接库
使用方式:-l库名
示例:
$gcc –o test main.c –L./ -lstr
动态加载库
1.打开动态库dlopen()
函数dlopen()按照用户指定的方式打开动态链接库
void * dlopen(const char *filename, int flag);
2.获得函数指针dlsym()
函数dlsym()可以获得动态链接库中指定函数的指针
void * dlsym(void *handle, char *symbol);
3.使用动态加载库的一个例子
$gcc –o testdl main.c libstr.so –ldl
环境搭建
判断是否安装:
$which gcc
安装gcc
$apt-get install gcc