我正试图为Android编译OpenSSH 7.6p1。它在getrrsetbyname.c
中失败了。这是该文件的clang-output:
(cd openbsd-compat && /Applications/Xcode.app/Contents/Developer/usr/bin/make)
/Users/johannes/src/android_ssh/android_ndk_arm_api21/bin/clang -I/Users/johannes/src/android_ssh/prefix/include -pipe -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -fno-builtin-memset -fstack-protector-strong -I. -I.. -I. -I./.. -I~/src/android_ssh/prefix/include/openssl -DHAVE_CONFIG_H -c getrrsetbyname.c
getrrsetbyname.c:219:12: error: incomplete definition of type 'struct state'
if ((_resp->options & RES_INIT) == 0 && res_init() == -1) {
~~~~~^
getrrsetbyname.c:71:8: note: forward declaration of 'struct state'
struct __res_state _res;
^
../config.h:1785:21: note: expanded from macro '__res_state'
#define __res_state state
^
getrrsetbyname.c:219:24: error: use of undeclared identifier 'RES_INIT'
if ((_resp->options & RES_INIT) == 0 && res_init() == -1) {
^
getrrsetbyname.c:71:20: error: tentative definition has type 'struct state' that is never completed
struct __res_state _res;
^
getrrsetbyname.c:71:8: note: forward declaration of 'struct state'
struct __res_state _res;
^
../config.h:1785:21: note: expanded from macro '__res_state'
#define __res_state state
^
3 errors generated.
make[1]: *** [getrrsetbyname.o] Error 1
make: *** [openbsd-compat/libopenbsd-compat.a] Error 2
所以它缺少一个常量(RES_INIT
)和一个结构(struct __res_state
),它们至少在macOS上,也可能在Linux上,在系统resolv.h中定义。但是,Android NDK中的resolv.h并没有定义那些。
我是否遗漏了某些内容,或getrssetbyname.c
与Android NDK目前的形式不兼容?