我遇到了一个问题,我无法编译使用 libssh 的 ssh客户端。 这取自 Wil Allsopp 一书。
#include <libssh/libssh.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main()
{
ssh_session my_ssh_session;
int rc;
char *password;
my_ssh_session = ssh_new();
if (my_ssh_session == NULL)
exit(-1):
ssh_options_set(my_ssh session, SSH_OTIONS_HOST, "c2host");
ssh_options_set(my_ssh_session, SSH_OTIONS_PORT, 443);
ssh_options_set(my_ssh_session, SSH_OTIONS_PORT, "c2user");
rc = ssh_connect(my_ssh_session);
if (verify_knownhost(my_ssh_session) < 0)
{
ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
exit(-1)
}
password = ("Password");
rc = ssh_userauth_password(my_ssh_session, NULL, password);
ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
}
我尝试过这个命令并没有帮助:
gcc -I C:\MinGW\lib\gcc\mingw32\6.3.0\include\libssh\ -L C:\MinGW\lib\gcc\mingw32\6.3.0\include\libssh -lssh ssh.c -o out.exe
我收到此错误:
C:/ MinGW的/ bin中/../ LIB / GCC /的mingw32 / 6.3.0 /../../../../的mingw32 / bin中/ ld.exe: 找不到-lssh collect2.exe:错误:ld返回1退出状态
任何想法?谢谢!
我想使用以下命令找到了库,但是我收到了这个错误:
gcc -I C:\MinGW\lib\gcc\mingw32\6.3.0\include\libssh\ -L
C:\ MinGW \ lib \ gcc \ mingw32 \ 6.3.0 \ lib \ -lssh ssh.c -o out.exe
ssh.c:在函数'main'中: ssh.c:35:52:警告:传递'ssh_options_set'的参数3使得整数指针没有强制转换[-Wint-conversion] ssh_options_set(my_ssh_session,SSH_OPTIONS_PORT,443); ^ ~~ 在ssh.c:19:0中包含的文件中: c:\ mingw \ lib \ gcc \ mingw32 \ 6.3.0 \ include \ libssh \ libssh.h:495:16:注意:预期'const void *'但参数类型为'int' LIBSSH_API int ssh_options_set(ssh_session session,enum ssh_options_e type, ^ ~~~~~~~~~~~~~~ C:\ Users \ matteo \ AppData \ Local \ Temp \ ccI0eQk0.o:ssh.c :(。text + 0xf):对
_imp__ssh_new' C:\Users\AppData\Local\Temp\ccI0eQk0.o:ssh.c:(.text+0x44): undefined reference to
_ imp__ssh_options_set'的未定义引用 C:\ Users \ AppData \ Local \ Temp \ ccI0eQk0.o:ssh.c :(。text + 0x62):未定义引用_imp__ssh_options_set' C:\Users\AppData\Local\Temp\ccI0eQk0.o:ssh.c:(.text+0x80): undefined reference to
_ imp__ssh_options_set' C:\ Users \ AppData \ Local \ Temp \ ccI0eQk0.o:ssh.c :(。text + 0x8e):对_imp__ssh_connect' C:\Users\AppData\Local\Temp\ccI0eQk0.o:ssh.c:(.text+0xb8): undefined reference to
_ imp__ssh_userauth_password'的未定义引用 C:\ Users \ AppData \ Local \ Temp \ ccI0eQk0.o:ssh.c :(。text + 0xca):未定义引用_imp__ssh_disconnect' C:\Users\AppData\Local\Temp\ccI0eQk0.o:ssh.c:(.text+0xd8): undefined reference to
_ imp__ssh_free' collect2.exe:错误:ld返回1退出状态
答案 0 :(得分:0)
您应该保持头脑清醒。在您编译完libssh之后,您将在此处找到三个目录。 lib,include和bin。将gcc与以下选项一起使用: -Iinclude -Llib -lssh 。这告诉编译器程序的include目录和lib目录。最后一个选项是告诉编译器您使用哪个.a文件。这应该可以成功编译。但是,您永远不知道您应该走多久。当我执行编译的文件时,它没有输出任何内容。因此,我使用gdb调试发生的情况。这是我找到的。
[New Thread 1932.0xec0]
[New Thread 1932.0x918]
[New Thread 1932.0x13dc]
[New Thread 1932.0x4f8]
[Thread 1932.0x918 exited with code 3221225781]
[Thread 1932.0x4f8 exited with code 3221225781]
During startup program exited with code 0xc0000135.
搜索后,我意识到原因是dll文件不足。因此,我将libssh.dll文件复制到程序中。然后,同样的问题。最后,我使用依赖项遍历器工具找出我需要的所有dll文件。结果是libzlib.dll,libcrypto-1_1-X64.dll文件。我只是将libzlib.dll文件添加到程序目录中。而且运行良好。我猜我的程序没有在libcrypto中使用该功能。也许您也应该添加它们。