静态库与动态库
在用c c++编程时经常用到库,库有静态的,和共享库。在这里我只是说linux系统下的静态库和共享库。有人把共享库称为“动态库”,这是相对于“静态库”而言的,是为了说明在程序链接它时的不同。不过从更宏观的层次上叫它共享库更贴切。
用例子说明吧:
现在有这几个文件:
zerg.h zerg.cpp hydralisk.h hydralisk.cpp
需要用库的形式提供。
制作静态库:
1.编译
gcc -c zerg.cpp hydralisk.cpp
编译出zerg.o hydralisk.o。
然后用一个命令“ar”,把所有的.o文件打包,生成静态库libzerg.a
2.打包
ar -qcs -o libzerg.a zerg.o hydralisk.o
总结:可见,静态库就是对一些.o文件的打包而已。只编译,不链接。提供静态库其实不太实用,一般都是提供共享库,如果需要调试的话,就直接提供源码好了。静态库的优势仅仅是比共享库效率高一小点。
制作共享库:
1.编译
g++ -fPIC -c zerg.cpp hydralisk.cpp
编译出zerg.o hydralisk.o。 和上面编译静态库时不同的是,需要指定"-fPIC"选项。 PIC(position indepedent code) , 共享库在运行时链接,不能预先知道装载的内存地址,所以要用-fPIC告诉编译器。
2. 链接
g++ -shared -o libzerg.so.1.0.0 zerg.o hydralisk.o
这样就生成了共享库libzerg.so.1.0.0
这两步都是用g++完成的,所以两步可以合成一步,如下命令可以直接把源码编译成共享库:
一步生成:
g++ -shared -fPIC -o libzerg.so.1.0.0 zerg.cpp hydralisk.cpp

浙公网安备 33010602011771号