4、a静态库生成 (1)创建静态库 由.o文件创建静态库,静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。
例如:我们将创建的静态库名为hello,则静态库文件名就是libhello.a。
生成.a文件:
ar -cr libhello.a hello.o
结果:
(2)调用静态库 main.cpp
#include <stdio.h> void hello(); int main() { hello(); return 0; } 编译main.cpp,静态链接libhello.a:
gcc main.cpp libhello.a -o main.out
5、so共享库生成 (1)创建so 由.o文件创建动态库文件,动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀lib,但其
文件扩展名为.so。
例如:我们将创建的动态库名为hello,则动态库文件名就是libhello.so。
生成so文件:
gcc -shared -fPIC -o libhello.so hello.o
我们执行,发现报错了:
这是因为在生成hello.o时,没有使用-fPIC选项,所以我们使用
gcc -c -fPIC hello.cpp
重新生成一下hello.o,再次执行生成so命令。
(2)调用so 编译main.cpp:
gcc -o main.out main.cpp -L. -lhello
执行,我们发现报错了:
我们发现报错了,原来是找不到动态库文件libhello.so,程序在运行时,会在/usr/lib和/lib等目录中查找需要的动态库文件。
若找到,则载入动态库,否则将提示类似上述错误而终止程序运行。
我们将文件libhello.so移动到目录/usr/lib中,再运行main.out,已经可以正常调用so了。