Android NDK を使用して OpenSSH をコンパイルしようとしていますが、失敗しています。
私の試みは、次の手順で構成されています。
Android用のOpenSSLをクロスコンパイルし、ヘッダー/ライブラリをインストールして
/home/me/arm
ここから OpenSSH 6.2p1 を取得します
アーカイブを抽出して実行します
./configure
。./configure --prefix=/home/me/arm \ --host=arm-linux-androideabi \ --with-ssl-dir=/home/me/arm
...次のエラーが発生しました:
getrrsetbyname.c:166:2: エラー: 不明な型名 'HEADER'
./configure
コマンドを変更して、次を含めます。ac_cv_search_getrrsetbyname=はい
...これにより、1 つの問題が修正されましたが、別のエラーで中止されました。
/usr/include/linux/un.h:17:8: エラー: 'struct sockaddr_un' の再定義
./configure
コマンドを再度変更して、以下を含めます。ac_cv_header_sys_un_h=はい
...さらに先に進みましたが、それでもエラーで中止されました:
channels.c: 関数 'channel_prepare_select' 内: channels.c:2143:2: 警告: 関数 'howmany' の暗黙的な宣言 [-Wimplicit-関数宣言] channels.c:2145:45: エラー: 'fd_mask' が宣言されていません (この関数で最初に使用)
今、私は立ち往生しています。私は Android を開いてクラックし、それがどこにも定義されていないsys/select.h
ことを発見しました。また、これを回避するオプションを見つけることができませんでした。定義されていないという問題もあります。fd_mask
./configure
howmany()
プログラムをコンパイルするには、どのような変更を加える必要がありますか?
編集:私はもう少し先に進むことができました。./configure
「未定義fd_mask
」エラーを回避するために、次の行を追加しました。
--with-cflags=-Dfd_mask=int
その後、次のエラーを受け取りました。
エラー: 'struct passwd' には 'pw_gecos' という名前のメンバーがありません
Android のpasswd
構造体にはメンバーがありませんpw_gecos
。これは、ソース コードの実際のパッチを作成せずに修正することは不可能でした。パッチはこちらです。
私は今、次のエラーで立ち往生しています:
dns.c: 関数 'dns_result_totext' 内: dns.c:56:7: エラー: 'ERRSET_SUCCESS' が宣言されていません (この関数で最初に使用) dns.c:56:7: 注: 宣言されていない各識別子は、それぞれに対して 1 回だけ報告されます。 登場する関数 dns.c:58:7: エラー: 'ERRSET_NOMEMORY' が宣言されていません (この関数で最初に使用) ...
編集:上記のパッチにいくつかの変更を加えて、これまでのところかなりの数のエラーを排除しました。も追加しましldns
た。configure コマンドは次のようになります。
patch -p0 <openssh.patch; autoconf; ./configure --prefix=/home/me/arm \ --host=arm-linux-androideabi \ --with-ldns=/home/me/arm \ --with-ssl-dir=/home/me/arm \ ac_cv_header_sys_un_h=はい
...そしてこれが新しいパッチです。私が今得るエラーは次のとおりです。
loginrec.c: 関数 'construct_utmp' 内: loginrec.c:665:17: エラー: 'DEAD_PROCESS' が宣言されていません (この関数で最初に使用) loginrec.c:665:17: 注: 宣言されていない各識別子は、 それが現れる各機能 loginrec.c: トップレベル: loginrec.c:727:45: 警告: 'struct utmpx' がパラメーター リスト内で宣言されました [デフォルトで有効]