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 に答える