我如何为 Android NDK 构建配置 Dropbear SSH?
How can I configure Dropbear SSH for Android NDK build?
我正在尝试从我的 Macintosh OS X Yosemite 和 Android NDK v10 和 Eclipse 交叉编译 Dropbear SSH 客户端,以便我的 Android 应用程序能够SSH到另一台机器。我使用的是最新版本的 Dropbear,2014.66。我一直在研究如何正确地 运行 configure
为这个 Android 构建生成一些文件。到目前为止,我是这样调用 configure
的:
PATH=/Users/me/Development/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/:$PATH;
./configure --host=arm-linux-androideabi --disable-zlib
但是,它失败并输出:
checking for arm-linux-androideabi-gcc... arm-linux-androideabi-gcc
checking whether the C compiler works... no
configure: error: in `/Users/me/sds/flume/android/workspace/jni/dropbear':
configure: error: C compiler cannot create executables
See `config.log' for more details
所以我没有正确设置交叉编译环境。如何设置我的环境以便设置 NDK,以便 gcc
和任何其他所需的构建工具都在我的路径中?
一旦我 configure
正确 运行,我将使用我基于 v0.52 Android 端口创建的 Android.mk
Dropbear 以及 ndk-build
命令:
# jni/botan/Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := dropbear
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES:=\
dbutil.c buffer.c \
dss.c bignum.c \
signkey.c rsa.c random.c \
queue.c \
atomicio.c compat.c fake-rfc2553.c
LOCAL_SRC_FILES+=\
common-session.c packet.c common-algo.c common-kex.c \
common-channel.c common-chansession.c termcodes.c \
tcp-accept.c listener.c process-packet.c \
common-runopts.c circbuffer.c
# loginrec.c
LOCAL_SRC_FILES+=\
cli-algo.c cli-main.c cli-auth.c cli-authpasswd.c cli-kex.c \
cli-session.c cli-service.c cli-runopts.c cli-chansession.c \
cli-authpubkey.c cli-tcpfwd.c cli-channel.c cli-authinteract.c
LOCAL_SRC_FILES+=netbsd_getpass.c
LOCAL_STATIC_LIBRARIES := libtommath libtomcrypt
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := dropbear
LOCAL_C_INCLUDES += $(LOCAL_PATH)/libtommath
LOCAL_C_INCLUDES += $(LOCAL_PATH)/libtomcrypt/src/headers
LOCAL_CFLAGS += -DDROPBEAR_CLIENT
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))
试试这个:
CC="arm-linux-androideabi-gcc --sysroot=/path/to/android-ndk-r10d/platforms/android-9/arch-arm" ./configure --host=arm-linux-androideabi --disable-zlib
(如果 configure 也尝试 运行 C++ 编译,您还需要在命令行中的 ./configure
之前添加 CXX="arm-linux-androideabi-g++ --sysroot=/same/path"
。)
或者,您可以构建一个完整的独立工具链,您无需手动指定 sysroot。您可以使用脚本 <ndk>/build/tools/make-standalone-toolchain.sh
构建此类工具链(请参阅 NDK 文档中的 "Standalone toolchain" 主题)。但是,如果您只打算将它用于 运行 配置,生成 config.h
以使用 Android.mk
构建其余部分,这可能有点矫枉过正。
我正在尝试从我的 Macintosh OS X Yosemite 和 Android NDK v10 和 Eclipse 交叉编译 Dropbear SSH 客户端,以便我的 Android 应用程序能够SSH到另一台机器。我使用的是最新版本的 Dropbear,2014.66。我一直在研究如何正确地 运行 configure
为这个 Android 构建生成一些文件。到目前为止,我是这样调用 configure
的:
PATH=/Users/me/Development/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/:$PATH;
./configure --host=arm-linux-androideabi --disable-zlib
但是,它失败并输出:
checking for arm-linux-androideabi-gcc... arm-linux-androideabi-gcc
checking whether the C compiler works... no
configure: error: in `/Users/me/sds/flume/android/workspace/jni/dropbear':
configure: error: C compiler cannot create executables
See `config.log' for more details
所以我没有正确设置交叉编译环境。如何设置我的环境以便设置 NDK,以便 gcc
和任何其他所需的构建工具都在我的路径中?
一旦我 configure
正确 运行,我将使用我基于 v0.52 Android 端口创建的 Android.mk
Dropbear 以及 ndk-build
命令:
# jni/botan/Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := dropbear
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES:=\
dbutil.c buffer.c \
dss.c bignum.c \
signkey.c rsa.c random.c \
queue.c \
atomicio.c compat.c fake-rfc2553.c
LOCAL_SRC_FILES+=\
common-session.c packet.c common-algo.c common-kex.c \
common-channel.c common-chansession.c termcodes.c \
tcp-accept.c listener.c process-packet.c \
common-runopts.c circbuffer.c
# loginrec.c
LOCAL_SRC_FILES+=\
cli-algo.c cli-main.c cli-auth.c cli-authpasswd.c cli-kex.c \
cli-session.c cli-service.c cli-runopts.c cli-chansession.c \
cli-authpubkey.c cli-tcpfwd.c cli-channel.c cli-authinteract.c
LOCAL_SRC_FILES+=netbsd_getpass.c
LOCAL_STATIC_LIBRARIES := libtommath libtomcrypt
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := dropbear
LOCAL_C_INCLUDES += $(LOCAL_PATH)/libtommath
LOCAL_C_INCLUDES += $(LOCAL_PATH)/libtomcrypt/src/headers
LOCAL_CFLAGS += -DDROPBEAR_CLIENT
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))
试试这个:
CC="arm-linux-androideabi-gcc --sysroot=/path/to/android-ndk-r10d/platforms/android-9/arch-arm" ./configure --host=arm-linux-androideabi --disable-zlib
(如果 configure 也尝试 运行 C++ 编译,您还需要在命令行中的 ./configure
之前添加 CXX="arm-linux-androideabi-g++ --sysroot=/same/path"
。)
或者,您可以构建一个完整的独立工具链,您无需手动指定 sysroot。您可以使用脚本 <ndk>/build/tools/make-standalone-toolchain.sh
构建此类工具链(请参阅 NDK 文档中的 "Standalone toolchain" 主题)。但是,如果您只打算将它用于 运行 配置,生成 config.h
以使用 Android.mk
构建其余部分,这可能有点矫枉过正。