c/c++ 之静态库
静态库
编译成目标文件(未链接)
g++ -c a.cc b.cc c.cc d.cc
#生成 a.o b.o c.o d.o
将目标文件打包为静态库
ar rs libxxx.a a.o b.o c.o d.o
#选项'r'表示将后边的文件列表添加到文件包,如果不存在就创建它,如果文件包中已有同名文件就替换成新的。
#选项's'是专用于生成静态库的,表示为静态库创建索引,这个索引被链接器使用。
#库名以lib开头
将库和主程序编译链接在一起
g++ main.cc -L. -lxxx -I. -o main
#'-L' 后接静态库的目录
#'-l' 后接静态库名称(去掉lib和.a。如:libxxx.a就写xxx)
#'-I' 后接头文件目录
查找路径
g++ -print-search-dirs #查看
install: /usr/lib/gcc/i486-linux-gnu/4.3.2/
programs: =/usr/lib/gcc/i486-linux-gnu/4.3.2/:/usr/lib/gcc/i486-linux-gnu/4.3.2/
libraries: =/usr/lib/gcc/i486-linux-gnu/4.3.2/:/usr/lib/gcc/i486-linux-gnu/4.3.2/
编译器会在这些路径和-L
指定的路径中查找-l
指定的库,比如-lxxx
编译器会先查找有没有libxxx.so
,如果有就链接它,如果没有就查找静态库。所以编译器是优先考虑共享库的,如果希望只链接静态库,可以指定-static
选项。