5
回答
linux动态链接库问题,郁闷了好久请高手帮忙……
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

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

/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

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

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

举报
qinyanhong
发帖于6年前 5回/1K+阅
共有5个答案 最后回答: 6年前

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

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

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

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

--- 共有 3 条评论 ---
Heysion正解 4年前 回复
xinzaibing我是菜鸟.. 我也曾经遇到过你这种问题..搞了很久...自己慢慢摸索出来的... 6年前 回复
qinyanhong兄台一语中的。高手就是高手。 6年前 回复

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

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

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

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

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