2011-01-06 48 views
1

私はC++のクラスでlibssh2の使用しようとすると、私は次のエラーを得続ける:私はCを使用して同じことを行う場合libssh2のとC++

 
undefined reference to `libssh2_session_init_ex' 
undefined reference to `libssh2_session_startup' 

は、すべてが正常に動作します。

助けが必要ですか?

次のビルドコマンドです

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; 
} 

ですはいプラットフォームは

+1

右のライブラリとリンクしていないのが好きです。 –

+0

C++コード(特にリンクに失敗した関数を呼び出す部分)を表示します。また、Linuxを使用していますか?どちらのディストロ/バージョン? –

答えて

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に電話を変更してください。

パラメータリスト内のライブラリとオブジェクトファイルの順序は重要です。それについてはhereをお読みください。

1

をLinuxのCが動作し、C++がない場合、それはのように聞こえますhereのように、libssh2関数のプロトタイプをextern "C" {}ブロックに含めることに失敗しています。 (ヘッダーファイルを再確認する必要があります。extern "C" {}を使用していないことに少し驚いています)

+0

いいえ、libsshヘッダーファイルのexgternが "c" {} – Avinash

+0

@Avinash:あなたのビルドに何か間違っていると思われます。コードをどのように構築するかについて、より多くの情報を提供する必要があります。 –

+0

がビルドコマンドを更新しました。 – Avinash

関連する問題