linux下制作静态库和动态库的方法

 我们都知道 *.a 代表静态库;*.so 代表动态库。那么这两个库到底怎么制作呢? 

制作静态库的方法:

  1. 把代码编译为目标文件形式:

# gcc -c liberr.c -o liberr.o

  1. 使用工具ar创建一个存档文件:

# ar rcs liberr.a liberr.o

  1. 编译程序时把程序和liberr.a链接起来:

# gcc errtest.c -o errtest -static -L./ -lerr

 

制作动态库的方法:

  1. 首先编译目标文件:

# gcc -fPIC -g -c liberr.c -o liberr.o

  1. 然后链接库:

#gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc

  1. 把生成的动态库liberr.so.1.0.0拷贝到/usr/lib目录里:

#cp liberr.so.1.0.0 /usr/lib

  1. 进入/usr/lib目录建立两个链接文件:

#cd /usr/lib

#ln -s liberr.so.1.0.0 liberr.so.1

#ln -s liberr.so.1.0.0 liberr.so

  1. 编译程序时和动态库链接起来:

#gcc errtest.c -o errtest -lerr

 

附加的常识:

 编译时,标准的头文件在 /usr/include 下,系统编译时默认自动到这搜索。

 若要自定义的头文件,用户可通过在命令中加 –I <库路径> 到额外指定的头文件搜索自己要包含的头文件。

 而系统默认的链接库搜索路径在 /usr/lib , /lib 下,若要链接自己制定的库要在命令中加上 -l<库名>  -L <库的路径>

 其中:–l 指定要链接的具体库名

              -L 到额外库搜索的路径

 例:g++ hello.cpp –o hello –I /usr/lib/qt-3.1/include –lqt –L /usr/lib/qt-3.1/lib

解释:-lqt 代表链接 qt 库,其中qt 库在/usr/lib/qt-3.1/lib下的名是libqt.so

–L /usr/lib/qt-3.1/lib 代表路径在/usr/lib/qt-3.1/lib

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值