我正在使用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
,它在~/libssh/include
中有libsshpp.hpp但在/usr/include/libssh
中没有。
我认为这是因为它们之间的版本不同,较新的有libsshpp.hpp,然后我尝试将文件libsshpp.hpp复制到/usr/include/libssh
但是当我在examples文件夹中编译示例libsshpp.cpp时出现了很多错误,所以我认为这不是解决方案。
我的问题是如何安装最新版本的libssh并自动将标头添加到/usr/include/libssh
不仅在其自己的安装文件夹中?
答案 0 :(得分:1)
如果您真的想这样做,可以修改 include / libssh / CMakeLists.txt 并添加
libsshpp.hpp
到 libssh_HDRS 变量。由于默认情况下未安装,因此可能无法正式支持。
答案 1 :(得分: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
祝你好运。
答案 2 :(得分:0)
在Ubuntu上,您可以使用
安装库apt-get install libssh-dev
然后,如果您手动编译,请使用-lssh
链接库,例如
gcc -lssh ssh-program.c