4

Android NDK を使用して OpenSSH をコンパイルしようとしていますが、失敗しています。

私の試みは、次の手順で構成されています。

  1. Android用のOpenSSLをクロスコンパイルし、ヘッダー/ライブラリをインストールして/home/me/arm

  2. ここから OpenSSH 6.2p1 を取得します

  3. アーカイブを抽出して実行します./configure

    ./configure --prefix=/home/me/arm \
            --host=arm-linux-androideabi \
            --with-ssl-dir=/home/me/arm

    ...次のエラーが発生しました:

    getrrsetbyname.c:166:2: エラー: 不明な型名 'HEADER'
  4. ./configureコマンドを変更して、次を含めます。

    ac_cv_search_getrrsetbyname=はい

    ...これにより、1 つの問題が修正されましたが、別のエラーで中止されました。

    /usr/include/linux/un.h:17:8: エラー: 'struct sockaddr_un' の再定義
  5. ./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./configurehowmany()

プログラムをコンパイルするには、どのような変更を加える必要がありますか?


編集:私はもう少し先に進むことができました。./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' がパラメーター リスト内で宣言されました
  [デフォルトで有効]
4

0 に答える 0