0

最新のlibssh2をWebサイトからダウンロードしてインストールしました/usr/src/libssh2-1.4.0

example ディレクトリにあるサンプル プログラム(ssh2.c)の 1 つをビルドしようとしました。makefrom /usr/src/libssh2-1.4.0/exampleasでコンパイルしたとき

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

しかし運がない。提案してください

4

1 に答える 1

0

手動でビルドした 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 フラグを取得することです。

于 2012-03-17T17:44:13.407 に答える