Nat*_*man 5 android arm openssh cross-compiling android-ndk
我尝试使用 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=是
...这解决了一个问题,但仍然因另一个错误而中止:
/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”的隐式声明 [-W隐式函数声明] channels.c:2145:45:错误:'fd_mask'未声明(在此函数中首次使用)
现在我被困住了。我已经破解了 Androidsys/select.h并发现它fd_mask没有在任何地方定义。我也无法找到./configure解决此问题的选项。还有howmany()未定义的问题。
我需要进行哪些更改才能编译程序?
编辑:我现在已经取得了一些进展。我添加了以下行来./configure解决“未定义fd_mask”错误:
--with-cflags=-Dfd_mask=int
然后我收到以下错误:
错误:“struct passwd”没有名为“pw_gecos”的成员
Android的passwdstruct没有成员pw_gecos。如果不为源代码创建实际的补丁,就不可能纠正这个问题。补丁在这里。
我现在遇到以下错误:
dns.c:在函数“dns_result_totext”中: dns.c:56:7: 错误:'ERRSET_SUCCESS' 未声明(在此函数中首次使用) dns.c:56:7:注意:每个未声明的标识符仅报告一次 它出现在函数中 dns.c:58:7: 错误:'ERRSET_NOMEMORY' 未声明(在此函数中首次使用) ...
编辑:我对上面的补丁做了一些修改,消除了到目前为止的一些错误。我也添加了ldns。配置命令现在如下所示:
补丁 -p0 <openssh.patch;
自动配置;
./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” [默认启用]
| 归档时间: |
|
| 查看次数: |
4644 次 |
| 最近记录: |