linux动态链接库问题,郁闷了好久请高手帮忙……

qinyanhong 发布于 2012/04/21 09:07
阅读 1K+
收藏 2

最近在链接动态库时老是出现如下错误:

/usr/bin/ld: cannot find -llibpcre

collect2: ld returned 1 exit status

使用的编译语句是:gcc -o pcredemo pcredemo.c -L /usr/lib -llibpcre

我记得刚安装pcre库时是可以通过编译的。最近不知道出了什么问题。

还有一个很奇怪的现象是,使用如下语句竟然可以通过编译并可正常运行程序:

gcc -o pcredemo pcredemo.c  /usr/lib/libpcre.so

但是我老是觉得使用这样的语句非常不爽。

后来又试了下其他的动态库(不管是第三方的开源库还是自己写的一个简单测试库),都出现这种问题。实在是不知道所措了……

加载中
0
xinzaibing
xinzaibing

你的动态库的名字是啥,如果是libpcre.so,编译时应该用

gcc -o pcredemo pcredemo.c -L /usr/lib -lpcre

你这个只是在编译时指定了动态库的目录,没有指定运行时的动态库目录,指定运行时动态库目录:

gcc  pcredemo.c -L /usr/lib -lpcre -Wl,-rpath,/usr/lib -o pcredemo

H
Heysion
正解
xinzaibing
xinzaibing
我是菜鸟.. 我也曾经遇到过你这种问题..搞了很久...自己慢慢摸索出来的...
qinyanhong
qinyanhong
兄台一语中的。高手就是高手。
0
xinzaibing
xinzaibing

另外,你编译好二进制后,可以用ldd命令查看是否能找到相应的依赖的动态库,如果没有找到,说明目录有问题。

ldd命令用法自己google一下吧,很简单的

0
中山野鬼
中山野鬼
来晚了。。。。。哈哈。不过建议不要乱用动态库。挺麻烦的。运行时也要环境要求。无论你指定,还是把动态库CP到环境找的到的地方。毕竟默认下,不会在当 前路径找库。基本上一个动态库你就得看成一个服务模块,像供祖宗一样,给他妥妥当当的安排好地方,还得告知天下,灵牌在这。
笃行之
笃行之
哈哈, 最后一句很生动, 太有意思了。
0
qinyanhong
qinyanhong

引用来自“中山野鬼”的答案

来晚了。。。。。哈哈。不过建议不要乱用动态库。挺麻烦的。运行时也要环境要求。无论你指定,还是把动态库CP到环境找的到的地方。毕竟默认下,不会在当 前路径找库。基本上一个动态库你就得看成一个服务模块,像供祖宗一样,给他妥妥当当的安排好地方,还得告知天下,灵牌在这。
Thank you for your advice
0
吃土的汉子
吃土的汉子
就是个名字问题
返回顶部
顶部