symbol lookup error:undefined symbol: libssh2_init

今天执行一个程序,报这个错误,第一直觉是路径没设置好或libssh2动态链接库没装。经过一番详细的检查

[root@RedHatEL63x-001 /]# find / -name libssh*
/usr/lib64/libssh2.so.1
/usr/lib64/libssh2.so.1.0.1
/usr/share/doc/libssh2-1.2.2

找到了两个链接库,都在/usr/lib64/下。

执行了一下:

[root@RedHatEL63x-001 /]# export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH

[root@RedHatEL63x-001 /]# echo $LD_LIBRARY_PATH

再执行程序依旧不管用;

[root@RedHatEL63x-001 /]# ldconfig -v|grep libssh
 libssh2.so.1 -> libssh2.so.1.0.1

发现libssh2是已经安装好的了。而且 libssh2.so.1是一个软链接指向了libssh2.so.1.0.1。

[root@RedHatEL63x-001 lib64]# ls libssh* -alc -h
lrwxrwxrwx. 1 root root   16 Mar 12  2013 libssh2.so.1 -> libssh2.so.1.0.1
-rwxr-xr-x  1 root root 161K Jul 28 19:35 libssh2.so.1.0.1

同样发现 libssh2.so.1是一个软链接指向了libssh2.so.1.0.1,起作用的就是libssh2.so.1.0.1文件。

那么路径是设置好的,动态库也是配置好的,为什么libssh2_init符号就是找不到呢,这把我之前的推断都推翻了。

在网上寻找了大半天答案,都没找到能解决问题的。中文外文的技术博客都翻遍了,均无所获。万事只能靠自己了。

我在想是不是libssh2.so.1.0.1动态库文件里头根本就没有libssh2_init()函数呢,能有什么办法查看到整个动态库里头

有哪些函数名吗?比如像vc6自带的那个depend那样。后来我在网上以关键字libssh2_init进行查找,想知道它到底是

在什么动态库里有的玩意,找到了这样一个网页:

https://libssh2.org/libssh2_init.html。网页指明“Added in libssh2 1.2.5 ”这个函数是在libssh2动态库的V1.2.5里面新加

的,显然上面的V1.0.1版本的libssh2动态库是没有这个函数的。

其实我们可以用下面这样的命令来验证是不是有这样一个函数,nm -D 命令可以列出so文件的所有符号:

[root@RedHatEL63x-001 lib64]# nm -D libssh2.so.1.0.1 |grep init

                 U EVP_CIPHER_CTX_init
0000003770e1e3b0 T libssh2_knownhost_init
0000003770e10490 T libssh2_publickey_init
0000003770e145a0 T libssh2_session_init_ex
0000003770e16920 T libssh2_sftp_init

这里发现确实没有libssh2_init函数。

或者这样验证也是一样的:

[root@RedHatEL63x-001 lib64]# objdump -tT libssh2.so.1.0.1 |grep init
0000003770e04078 l    d  .init 0000000000000000              .init
0000000000000000      DF *UND* 0000000000000000              EVP_CIPHER_CTX_init
0000003770e145a0 g    DF .text 00000000000000a4  Base        libssh2_session_init_ex
0000003770e10490 g    DF .text 00000000000008fa  Base        libssh2_publickey_init
0000003770e16920 g    DF .text 0000000000000739  Base        libssh2_sftp_init
0000003770e1e3b0 g    DF .text 0000000000000042  Base        libssh2_knownhost_init


所以要解决这个问题必须下载V1.2.5以上版本的

libssh2动态库(下载地址:https://www.libssh2.org/),安装并配置好,另外需要将libssh2.so.1 文件软链接到高版本

的libssh2动态库文件。


有时候发现度娘再好,谷歌再棒,都抵不过自己爱探索的心!原创真迹,转载请注明!!!

https://www.libssh2.org/






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值