c++ - 无法使用 libssh2 进行编译

标签 c++ c linux ssh libssh2

我下载并安装了最新的libssh2来自他们的website进入位置 /usr/src/libssh2-1.4.0

我试图构建示例程序之一 (ssh2.c)可以在示例目录中找到。当我从 /usr/src/libssh2-1.4.0/example 中使用 make 编译为

make ssh2

,它编译并运行得很好。然后,我将程序 ssh2.c 复制到不同的路径 (~/Projects/precious/) 并发出命令

gcc -g -I/usr/src/libssh2-1.4.0/src -I/usr/src/libssh2-1.4.0/include -I/usr/src/libssh2-1.4.0/src/obj ssh.c -o ssh -lssh2 -ldl -lnsl -lresolv -lcrypto -lssl -lz 

当我尝试运行该程序时,它会向我显示以下消息

./ssh: symbol lookup error: ./ssh: undefined symbol: libssh2_session_handshake

我也尝试将其简单地编译为

g++ -g ssh.c -o ssh -lssh2

响应都是一样的。

我也尝试编译为

gcc -DHAVE_CONFIG_H      -g -O2  -I/usr/src/libssh2-1.4.0/src -I/usr/src/libssh2-1.4.0/include -I/usr/src/libssh2-1.4.0/src/obj -c -o ssh.o ssh.c 
libtool --tag=CC --mode=link gcc  -g -O2   -o ssh  ssh.o /usr/local/lib/libssh2.la

但没有任何运气。请推荐

最佳答案

我怀疑您手动构建的 libssh2 软件包与您系统上安装的版本不同(可能更新)。并且您的链接行正在尝试使用系统上安装的链接行,该链接行中没有 libssh2_session_handshake 函数。试试这一行:

gcc -g -L/usr/local/lib -I/usr/src/libssh2-1.4.0/src -I/usr/src/libssh2-1.4.0/include -I/usr/src/libssh2-1.4.0/src/obj ssh.c -o ssh -lssh2 -ldl -lnsl -lresolv -lcrypto -lssl -lz 

或者也许是这个:

gcc -g -L/usr/src/libssh2-1.4.0/src/obj -I/usr/src/libssh2-1.4.0/src -I/usr/src/libssh2-1.4.0/include -I/usr/src/libssh2-1.4.0/src/obj ssh.c -o ssh -lssh2 -ldl -lnsl -lresolv -lcrypto -lssl -lz 

重要的是让 -L 标志指向编译库所在的路径。

关于c++ - 无法使用 libssh2 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751981/

相关文章:

c++ - 如何调试仅作为独立应用程序死锁的多线程程序

c - 试图导致 "worse case"快速排序

c++ - 复制有关字节序的整数内容

c - 海湾合作委员会警告 : pointer arithmetic with type void *

linux - Ubuntu cron shebang 不工作

c++ - 删除在 C++ 中使用 malloc 分配的 std::string 数组

c++ - 当我在基类中设置 protected 数据时,它会更改派生类中 protected 数据的值吗?

linux - Ubuntu 14.04 找不到包依赖

c++ - 将对象作为参数传递给 C++ 中的函数

c - 分页代码片段