使用libssh链接期间未定义的符号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用libssh链接期间未定义的符号相关的知识,希望对你有一定的参考价值。
我使用libssh来完成两个系统之间的连接,ssh服务器是redhat,客户端是CentOS。
我的代码编译和链接就好了,除了在运行时我一直看到这个,
[1] libssh 0.5.5 (c) 2003-2010 Aris Adamantiadis (aris@0xbadc0de.be) Distributed under the LGPL, please refer to COPYING file for information about your rights, using threading threads_noop
[2] Nonblocking connection socket: 4
[2] Socket connecting, now waiting for the callbacks to work
[1] Socket connection callback: 1 (0)
[1] SSH server banner: SSH-2.0-OpenSSH_5.3
[1] Analyzing banner: SSH-2.0-OpenSSH_5.3
[1] We are talking to an OpenSSH client version: 5.3 (50300)
[2] Received SSH_KEXDH_REPLY
[2] SSH_MSG_NEWKEYS sent
[2] Received SSH_MSG_NEWKEYS
./sshclient: symbol lookup error: ./sshclient: undefined symbol: ssh_pki_import_privkey_file
代码看起来像这样,
int main()
{
ssh_session my_ssh_session;
ssh_key *pubkey,*privkey;
int verbosity = SSH_LOG_PROTOCOL;
int port = 5022,rc;
char username[20];
strcpy(username,"yoda"); //assigned a user name
my_ssh_session = ssh_new();
if (my_ssh_session == NULL)
exit(-1);
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "XX.XX.XX.XX");
ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);
ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, username);
rc = ssh_connect(my_ssh_session);
if(rc != SSH_OK){
fprintf(stderr, "Error connecting to host: %s
",ssh_get_error(my_ssh_session));
exit(-1);
}
rc = ssh_pki_import_privkey_file("/home/yoda/keys/id_rsa",NULL,NULL,NULL,privkey);
if(rc != SSH_OK){
fprintf(stderr, "Custom Message: Private Key unacceptable.
");
exit(-1);
}
fprintf(stdout, "Custom Message: Here now.
");
rc = ssh_userauth_publickey(my_ssh_session, NULL, *privkey);
if(rc == SSH_AUTH_ERROR){
fprintf(stderr, "Custom Message: A serious error has occured during authentication.
");
exit(-1);
}
if(rc == SSH_AUTH_DENIED){
fprintf(stderr, "Custom Message: Unacceptable key or method.
");
exit(-1);
}
if(rc == SSH_AUTH_PARTIAL){
fprintf(stderr, "Custom Message: Partially authenticated user.
");
exit(-1);
}
ssh_key_free(*pubkey);
ssh_key_free(*privkey);
ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
return(0);
}
我知道这个代码有很多问题但是在这一点上,我第一次尝试使用这个库,并且更关心它是如何工作的。任何有关最新情况的见解将不胜感激。
答案
libssh 0.5没有维护。你应该使用libssh 0.6。如果我没记错的话,ssh_pki_import_privkey_file()仅适用于libssh 0.6 ...
以上是关于使用libssh链接期间未定义的符号的主要内容,如果未能解决你的问题,请参考以下文章
Libtool 在 make install 期间未创建版本信息符号链接
LIBSSH2和dso_dlfcn.c:...对'dlopen'的未定义引用
MSVC 中的链接错误 LNK2019,带有 __imp__ 前缀的未解析符号,但应该来自静态库
错误:预期类型 - eventDispatcher:(nonnull RCTEventDispatcher *)eventDispatcher;在 iOS 构建期间出现“未定义符号”错误