gcc引用静态库的编译错误

gcc引用静态库的编译错误

在linux下编译,遇到一个错误,编译命令如下:
gcc -llibname a.o b.o -o out -static
提示:/usr/lib/ld: cannot find -llibname。
-l是引用一个静态库,找不到这个静态库,难道是名称不对?
本地目录下有一个libname.a,网上查了下,可以将.a文件等同于.o文件对待。
参考网址:http://blog.csdn.net/yaochunnian/article/details/7059764
将命令修改为:
gcc libname.a a.o b.o -o out -static
之前的错误没了。
新的错误来了。
提示一大堆定义找不到。
想起来以前调查静态库的时候,被依赖者要放在依赖者后面,难道此处也是这个原因。
将命令修改为:
gcc a.o b.o libname.a -o out -static
问题解决。
但还有新的问题,提示:
pthread相关的一些定义找不到。
既然可以把.a当作.o看待,-static是不是就没必要了。
还是先看看man gcc中关于-static的介绍吧:
-static:
On systems that support dynamic linking, this prevents linking with the shared libraries.  On other systems, this option has no effect.
防止加载动态库。有点多余,我们只需想引用个静态库。
命令修改为:
gcc a.o b.o libname.a -o out
一个错误又消失了。
但还是存在错误,提示dlopen, dlclose, dlsym等一堆dl相关的函数找不到。
网上搜索下,找到了一篇文章:
http://blog.sina.com.cn/s/blog_4ba5b45e0102e76l.html
解决方式很简单,加上-ldl即可。
根本原因是dl库没加载。
命令修改为:
gcc a.o b.o libname.a -ldl -o out
OK,编译通过。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值