1

当我尝试在我的 C++ 类中使用 libssh2 时,我不断收到以下错误:

对“libssh2_session_init_ex”的未定义引用
未定义对“libssh2_session_startup”的引用

如果我使用 C 做同样的事情,一切正常。

有什么帮助吗?

以下是构建命令

g++ -Wall -g -I/libssh2-1.2.4/src -I/libssh2-1.2.4/include -L/libssh2-1.2.4/src/obj -L/openssl-0.9.8k/ -L/SecuritySDK/3.0.13/RC/LATEST/security/lib  -lssh2 -ldl -lnsl -lresolv -lhash -lhandlers -lcrypto -lssl -lz -lbpwp3   rhost.o rpipe.o rutils.o -o rpipe

以下是类成员函数

void rhost::InitSession()
{
    m_session = libssh2_session_init();
    if ( libssh2_session_startup(m_session, m_sock) )
    {
        fprintf (stderr, "Failure establishing SSH session\n");
        exit(-1);
    }
    return;
}

是的平台是linux

4

2 回答 2

2

将您的呼叫更改为g++ -Wall -g -I/libssh2-1.2.4/src -I/libssh2-1.2.4/include -L/libssh2-1.2.4/src/obj -L/openssl-0.9.8k/ -L/SecuritySDK/3.0.13/RC/LATEST/security/lib rhost.o rpipe.o rutils.o -o rpip -lssh2 -ldl -lnsl -lresolv -lhash -lhandlers -lcrypto -lssl -lz -lbpwp3.

参数列表中库和目标文件的顺序很重要。在这里阅读。

于 2011-01-06T16:02:29.513 回答
1

如果 C 有效而 C++ 无效,那么听起来您没有在块中包含 libssh2 函数原型,如此extern "C" {}所述。(你应该仔细检查头文件;我有点惊讶它不使用自己。)extern "C" {}

于 2011-01-06T13:54:52.463 回答