[GNU/Linux]静态库的创建与使用

静态库,static library
标准命名: libxxx.a
第一步:编译,得到*.o文件
第二步:打包
ar ‐rcs   libxxx.a   file1.o  file2.o … fileN.o
(注:ar只是将*.o文件打个包而已,并非“链
接”)

演示:
g++ ‐c test1.cpp ‐o test1.o
g++ ‐c test2.cpp ‐o test2.o
ar ‐rcs libtest.a test1.o test2.o
查看静态库中的符号
nm  libtest.a
作者: 邵发

 

静态库的交付物:
‐ 头文件 *.h
‐ 库文件 libxxx.a

 

由于libtest.a本质是就是test1.o和test2.o打个包而
已,因此可以像.o文件一样使用
比较:
g++ main.cpp test1.o  test2.o  ‐o helloworld
g++ main.cpp  libtest.a ‐o helloworld
也就是说,在命令行里直接加上libtest.a的全路
径是可以的

 

如果 libtest.so 和 libtest.a同时存在。。。
则默认优先连接 libtest.so

 

当 libtest.so 和 libtest.a同时存在,以下两种方式可以强制
使用静态库:
① 使用全路径 【推荐】
g++ main.cpp  build/libtest.a ‐o helloworld
② ‐static : 强制所有的库都使用静态库版本【行不通】
g++ main.cpp ‐o helloworld ‐static ‐Lbuild ‐ltest
缺点:
所有的库(包括libc , libstdc++)都必须提供静态库版本,少
一个都不行。。
注:centos默认安装时不带 libc.a libstdc++.a ..

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注