静态库
1. 静态库对函数库的链接是在编译时期完成的
2. 程序在运行时与函数库再无瓜葛,移植方便
3. 浪费空间和资源,因为所有相关的目标文件都与牵连的函数库被链接成一个可执行文件
4. 静态库对程序的更新部署和发布都带来麻烦。
动态库
1. 动态库把对一些函数的链接载入推迟到程序运行的时期
2. 可以实现进程间的资源共享
3. 将一些程序升级变得简单
4. 做到链接载入完全由程序员在程序代码中控制
g++使用
用g++编译hello world
1. 编写hello world代码
2. 使用g++命令编译生成可执行文件hello.out
3. g++命令规则
预编译 g++ -E hello.cpp -o hello.i 编译 g++ -S hello.cpp -o hello.s 汇编 g++ -c hello.cpp -o hello.o
命令详解
1. 预编译 g++ -E hello.cpp -o hello.i
将#include <iostream>展开,截取了最后一屏的显示
2. 编译 g++ -s hello.cpp -o hello.s 截取最后一屏的显示
3. 汇编,生成对象文件 g++ -c hello.cpp -o hello.c 显示二进制文件
4. 链接,编写三个文件add.h add.cpp main.cpp
编译运行 g++ add.h add.cpp main.cpp -o main.out
静态库与动态库生成
静态库:linux: *.a windows: *.lib
动态库:linux: *.so windows: *.dll
静态库的创建和使用
静态库是一些目标文件的集合体
使用ar创建一个静态库文件
1. 编译add.cpp文件生成add.o文件 g++ -c add.cpp
2. 使用ar从.o文件中创建.a文件 ar -r libadd.a add.o
3. 使用.a文件 g++ main.cpp -L. -ladd -o main
动态库创建和使用
1. 生成.so文件 g++ -shared -fPIC add.cpp -o libmyadd.so
2. 使用.so文件链接main g++ main.cpp -L. -lmyadd -o main.out
3. 添加路径并运行main.out LD_LIBRARY_PATH=. ./main.out