1

我正在使用 libssh 编写一个 C++ 程序,所以我环顾四周安装该库。起初我安装,sudo apt-get install libssh-dev但 /usr/include/libssh 中没有 libsshpp.hpp。

然后我git://git.libssh.org/projects/libssh.git libssh在 ~ 目录中克隆并运行./build/build_make.sh,它有 libsshpp.hpp ,~/libssh/include但没有/usr/include/libssh

我认为这是因为它们之间的版本不同,较新的版本有 libsshpp.hpp,然后我尝试将文件 libsshpp.hpp 复制到/usr/include/libssh但是当我在示例文件夹中编译示例 libsshpp.cpp 时出现很多错误,所以我认为这不是解决方案。

我的问题是如何安装最新版本的 libssh 并自动将标头添加到/usr/include/libssh它自己的安装文件夹中?

4

3 回答 3

1

如果你真的想这样做,你可以修改include/libssh/CMakeLists.txt并添加

libsshpp.hpp

libssh_HDRS变量。因为默认没有安装,所以官方可能不支持。

于 2014-04-03T20:59:02.410 回答
0

您最好不要使用 git 存储库中的代码,因为这些标头与libssh您系统上实际安装的代码不匹配。

因此,我建议您撤消您所做的更改(删除您复制或创建的文件或符号链接),而不是使用apt. 您可以通过执行以下操作找出安装了哪些头文件:

rpm -ql libssh-dev

在我的系统(Fedora)上,这个包实际上被称为libssh-devel. 当我跑

rpm -ql libssh-devel

我得到以下输出(部分)

/usr/include/libssh/callbacks.h
/usr/include/libssh/legacy.h
/usr/include/libssh/libssh.h
/usr/include/libssh/server.h
/usr/include/libssh/sftp.h
/usr/include/libssh/ssh2.h
/usr/lib64/cmake/libssh-config-version.cmake
/usr/lib64/cmake/libssh-config.cmake
/usr/lib64/libssh.so
/usr/lib64/libssh_threads.so
    ...

如您所见,libssh.h标题位于libssh目录中,因此您可以从代码中使用

#include <libssh/libssh.h>

使用该方法将更好地确保您安装的标头与您安装的库匹配,并在以后节省许多令人沮丧的时间。

这是一个快速测试程序,您可以使用它来确保它确实有效:

// sshtest.cpp
#include <iostream>
#include <libssh/libssh.h>

int main()
{
    std::cout << ssh_copyright() << std::endl;
    return 0;
}

编译、链接并运行:

g++ -o sshtest sshtest.cpp -lssh ./sshtest

这应该生成以版本号开头的版权字符串,libssh以便您可以验证它是否与您期望的版本匹配。

刚才在我的机器上,产生了以下输出:

0.6.3 (c) 2003-2014 Aris Adamantiadis, Andreas Schneider, and libssh contributors. Distributed under the LGPL, please refer to COPYING file for information about your rights

祝你好运。

于 2014-04-03T21:03:46.097 回答
0

在 Ubuntu 上,您可以使用以下命令安装库

apt-get install libssh-dev

然后,如果您要手动编译,请使用-lssh链接库,例如。

gcc -lssh ssh-program.c
于 2018-03-18T16:21:49.093 回答