工作流程:
源代码(.h .cpp .c)通过预处理器得到预处理后源代码(.i)通过编译器得到汇编代码(.s)通过汇编器得到目标代码(.o)后与启动代码,库代码,其他目标代码通过连接器得到可执行程序(.exe .out)
gcc、g++常用参数
g++ test.cpp -E -o test.i // 对test.cpp进行预处理得到预处理后源代码test.i
g++ test.i -S -o test.s // 对test.i进行编译得到汇编代码test.s
g++ test.cpp -c -o test.o // 对test.cpp进行编译、汇编得到目标代码test.o
静态库、动态库
静态库:
命名规则:
Linux:libxxx.a
lib:前缀(固定)
xxx:库的名字
.a:后缀(固定)
Windows:libxxx.lib
制作:
1、gcc 获得.o文件
2、将.o文件打包,使用ar工具(archive)
ar rcs libxxx.a xxx.o xxx.o
r-将文件插入到备份文件中
c-建立备份文件
s-索引
calc文件夹:
1、gcc -c add.cpp div.cpp mut.cpp sub.cpp //生成.o文件
2、ar rcs libcalc.a add.o div.o mut.o sub.o //生成libcalc.a静态库
3、g++ main.cpp -o app -I ./include -l calc -L ./lib // -I指定include搜索路径 -l指定使用库 -L指定搜索库的路径
动态库:
命名规则
Linux:libxxx.so
lib:前缀(固定)
xxx:库的名字
.so:后缀(固定)
在linux下是一个可执行文件
Windows:libxxx.dll
制作:
gcc得到.o文件,得到和位置无关的代码
gcc -c -fpic/-fPIC a.c b.c
gcc得到动态库
gcc -shared a.o b.o -o libcalc.so
配置动态库路径
1、配置环境变量(终端关闭就需要重新配置)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/carrot/linux/lesson04/library_so/lib
2、在home目录下.bashrc文件末尾添加环境变量(用户级配置)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/carrot/linux/lesson04/library_so/lib
3、在/etc/profile文件末尾添加环境变量(系统级配置)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/carrot/linux/lesson04/library_so/lib
4、配置/etc/ld.so.cache
在/etc/ld.so.conf末尾添加/home/carrot/linux/lesson04/library_so/lib
使用sudo ldconfig跟新
ppt