gcc
gcc 的使用
编译
-E 进行预处理
-S 生成对应的汇编文件
-c 生成对应的二进制可执行文件
ld 对所需要的库和头文件进行链接
-lstdc++ 对 c++文件进行编译操作
-o 直接生成对应可执行文件
-L 包含的库路径
-l(小写 L) 指定库名
-I(大写 I) 指定头文件路径
通常库名为 libxxx.so(动态库)或者 libxxx.a(静态库),指定时只需要输入 xxx 的部分
例如:gcc test.c -o test -L /lib -lxxx
- -D 指定宏编译
- -g gdb 调试,不加该选项不能使用 gdb 调试
g++
编译 c++的文件,用法和 gcc 类似
可以使用类似-std=c++2a,指定所使用的 c++标准
制作库文件
静态库
- 编译为.o 文件(二进制可执行文件)
- 将.o 文件进行打包
使用’’ar rsc +发布的库名+需要打包的文件名’’ 命令进行打包
例如:ar rsc libxxx.a *.o
- 将头文件和库文件一起发布
动态库
- 编译与位置无关的代码,生成.o 文件
使用参数 -fPIC(声明与位置无关)
- 将.o 文件打包(使用**-shared**参数)
-o 指定库名,加上所需文件
例如:gcc -shared -o libxxx.so *.o
- 将头文件和库文件一起发布
优缺点对比
- 静态库执行快,发布时不需要发布库,但是执行程序体积会比较大,库变更时候需要重新编译应用
- 动态库执行相对较慢,发布需要发布库,但执行程序体积相对较小,库变更时,一般不需要重新编译应用