gcc libssh在Windows上链接问题

时间:2018-02-22 15:04:11

标签: c windows gcc mingw

我遇到了一个问题,我无法编译使用 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退出状态

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中使用该功能。也许您也应该添加它们。