0

我目前正在尝试创建 ac 程序,它将 ssh 到几个远程服务器。我正在尝试将 libssh 库链接到我的程序,但我遇到了困难。这是我的主要源文件:

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

int main(){\n
    printf("Attempting Library Call!\n");
    ssh_session my_ssh_session=ssh_new();
    printf("Exiting Program!\n");
    ssh_free(my_ssh_session);
    return (EXIT_SUCCESS);
}

生成文件:

all:
    gcc -Wall -g -I/home/user/SSH_CON/libssh/include -L/home/user/SSH_CON/libssh/lib main.c -o ssh -lssh

这是我第一次尝试将库与 ac 程序链接,但遇到了困难。从https://www.libssh.org/安装程序库中下载的文件如下:

/libssh
    /bin
        libssh.dll
        libssh_threads.dll
    /CMake
        libssh-config.cmake
        libssh-config-version.cmake
    /include/libssh
        callbacks.h
        legacy.h
        libssh.h
        server.h
        sftp.h
        ssh2.h
    /lib
        /pkgconfig
            libssh.pc
            libssh_threads.pc
        libssh.dll.a
        libssh_threads.dll.a
    Uninstall.exe

我在网上做了很多搜索,并尝试添加 libssh.dll 和 libssh.dll.a 库。gcc 成功地使 ssh.exe 可执行,但是当我尝试运行它时,我一直收到此错误:

/home/user/SSH_CON/ssh.exe: error while loading shared libraries: libssh.dll: cannot open shared object file: no such file or directory

我不知道从这里去哪里。有没有人有什么建议?

更新:

将 libssh.dll.a 和 libssh.dll 放入我的 main.c 文件的工作目录中,现在我收到此错误:

/home/user/SSH_CON/ssh.exe: error while loading shared libraries: ?: cannot open shared object file: no such file or directory

在我的可执行文件上运行 ldd 会产生以下结果:

ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll
KERNEL32.DLL => /cygdrive/c/Windows/SYSTEM32/KERNEL32.DLL
KERNELBASE.dll => /cygdrive/c/Windows/SYSTEM32/KERNELBASE.dll
cygwin1.dll => /usr/bin/cygwin1.dll
libssh.dll => /home/user/SSH_CON/libssh.dll
ADVAPI32.DLL => /cygdrive/c/Windows/SYSTEM32/ADVAPI32.DLL
msvcrt.dll => /cygdrive/c/Windows/SYSTEM32/msvcrt.dll
SHELL32.DLL => /cygdrive/c/Windows/SYSTEM32/SHELL32.DLL
WS2_32.DLL => /cygdrive/c/Windows/SYSTEM32/WS2_32.DLL

有什么方法可以识别丢失的名为 的库?吗?有什么方法可以将这个库编译为静态的,以便在运行时它不依赖于任何共享库?

4

0 回答 0