Не удается получить код для компиляции с использованием libssh в Raspbian, несмотря на следующие инструкции здесь и в других местах - PullRequest
0 голосов
/ 08 июня 2018

Я надеюсь, что у кого-то могут быть какие-то идеи для меня, прежде чем я вырву оставшиеся волосы.Я работаю с Raspberry Pi 3 и libssh-dev и у меня проблемы с получением кода для компиляции.Есть мысли?

Я установил libssh-dev из репозитория по умолчанию в Raspbian Jessie и потратил целый день на попытки включить библиотеки при компиляции.Вот мой тестовый код, с соответствующим образом установленным пользователем и хостом при компиляции.

#define LIBSSH_STATIC 1
#include <libssh/libssh.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
  ssh_session my_ssh_session;
  int verbosity = SSH_LOG_PROTOCOL;
  int port = 22;

  my_ssh_session = ssh_new();
  if (my_ssh_session == NULL)
    exit (-1);

  ssh_options_set (my_ssh_session, SSH_OPTIONS_HOST, "localhost");
  ssh_options_set (my_ssh_session, SSH_OPTIONS_USER, "username");
  ssh_options_set (my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
  ssh_options_set (my_ssh_session, SSH_OPTIONS_PORT, &port);

  // other code here

  ssh_free(my_ssh_session);

  return 0;
}

Я использую следующую команду для компиляции кода.

gcc -DLIBSSH_STATIC test.c -o test

ВотЯ получаю сообщения об ошибках.Я предполагаю, что библиотеки не включают правильно?

/tmp/ccVIYUs5.o: In function `main':
printschedules.c:(.text+0x1c): undefined reference to `ssh_new'
printschedules.c:(.text+0x44): undefined reference to `ssh_options_set'
printschedules.c:(.text+0x54): undefined reference to `ssh_options_set'
printschedules.c:(.text+0x68): undefined reference to `ssh_options_set'
printschedules.c:(.text+0x7c): undefined reference to `ssh_options_set'
printschedules.c:(.text+0x84): undefined reference to `ssh_free'
collect2: error: ld returned 1 exit status

1 Ответ

0 голосов
/ 08 июня 2018

Вы правы, что библиотеки не включены правильно.

#include <libssh/libssh.h> просто сообщает компилятору, какие функции предоставляет libssh и как их вызывать, но вам также нужно указать компоновщику, где найтидвоичная библиотека.

Чтобы связать статический двоичный файл libssh, добавьте путь к статическому архиву (возможно, /usr/lib/arm-linux-gnueabihf/libssh.a) в командную строку компилятора.

...