Неопределенная ссылка на `_imp__ssh_new'для libssh

Я пытаюсь создать SSH-соединение с Windows 10 на Ubuntu 16.04

Код: download.cpp

#include "libssh.h"
#include <stdlib.h>
#include <stdio.h>
int main()
{
    ssh_session my_ssh_session;
    int rc;
    int port = 22;
    int verbosity = SSH_LOG_PROTOCOL;
    char *password;
    // Open session and set options
    my_ssh_session = ssh_new();
    if (my_ssh_session == NULL)
        exit(-1);
    ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "192.168.1.6");
    ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, "sajid");
    ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
    ssh_options_set(my_ssh_session, SSH_OPTIONS_CIPHERS_C_S,"aes128-ctr");

    rc = ssh_connect(my_ssh_session);
    if (rc != SSH_OK)
    {
        fprintf(stderr, "Error: %s\n", ssh_get_error(my_ssh_session)); //HERE IS WHERE I GET THE ERROR
        ssh_free(my_ssh_session);
        exit(-1);
    }
    password = "pass";
    rc = ssh_userauth_password(my_ssh_session, NULL, password);
    if (rc != SSH_AUTH_SUCCESS)
    {
        fprintf(stderr, "Error authenticating with password: %s\n",
            ssh_get_error(my_ssh_session));
        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
        exit(-1);
    }


    ssh_disconnect(my_ssh_session);
    ssh_free(my_ssh_session);
}

Который показывает ошибки, подобные этим:

libssh.h находится в той же папке, что и download.cpp, а также legacy.h. Скажите, пожалуйста, почему я не могу создать ssh_session?

1 ответ

libssh.h находится в той же папке, что и download.cpp, а также legacy.h. Скажите, пожалуйста, почему я не могу создать ssh_session?

У вас есть ошибка компоновки, а не ошибка компиляции. Компилятор видит и распознает libssh.h, но для сборки вам нужно предоставить в библиотечный файл соответствующие определения того, что объявлено в этом заголовочном файле.

Обязательно следуйте инструкциям здесь:

Чтобы иметь возможность компилировать разрабатываемое вами приложение, вам нужно либо передать LIBSSH_STATIC как определение в командной строке компилятора, либо определить его, прежде чем включать libssh.h. Это необходимо, поскольку динамическая библиотека должна указывать атрибут dllimport.

#define LIBSSH_STATIC 1
#include <libssh/libssh.h>
Другие вопросы по тегам