【问题标题】:Unable to build external OpenSSL library for Android NDK on Windows/Cygwin无法在 Windows/Cygwin 上为 Android NDK 构建外部 OpenSSL 库
【发布时间】:2012-02-22 08:06:34
【问题描述】:

我需要为 Android 应用程序构建最新的 OpenSSL (1.0.0g)。我正在尝试遵循https://github.com/fries/android-external-openssl 给出的示例,但我无法构建它。

我正在运行带有完整且最新的 Cygwin 的 Windows 7 Professional(64 位)。我已经安装了 Android SDK 和 NDK,我可以成功构建和运行 NDK 的 hello-jni 示例应用程序。

我创建了一个名为 hello-openssl 的新示例 NDK 应用程序。在它的 jni 目录中,我创建了一个 openssl 目录。在那里,我解压缩了https://github.com/fries/android-external-openssl/zipball/master,它在 c:\android\android-ndk\samples\hello-openssl: 下给了我这个树结构:

jni
+- openssl
   +- apps
   +- crypto
   +- include
      +- openssl
   +- ssl

然后我修改了 jni 目录中的 Android.mk 文件以尝试包含 OpenSSL 文件:

subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \
    openssl \
))

include $(subdirs)

现在当我执行 ndk-build 时,它编译了几个 .c 文件,但很快就失败了:

Compile thumb  : crypto <= cryptlib.c
In file included from jni/openssl/crypto/cryptlib.c:117:
jni/openssl/crypto/cryptlib.h:65:18: error: e_os.h: No such file or directory
jni/openssl/crypto/cryptlib.h:72:28: error: openssl/crypto.h: No such file or directory

我找到了http://osdir.com/ml/android-ndk/2010-07/msg00424.html,它告诉我“添加 jni 和 jni/include 到 crypto/Android.mk 中的上述 LOCAL_C_INCLUDES",但我不知道应该使用什么语法来实现这一点。

我也无法确定我的目录结构是否正确。

我真诚地感谢可以提供的任何帮助。

谢谢!

【问题讨论】:

    标签: android android-ndk openssl


    【解决方案1】:

    我通过放弃https://github.com/fries/android-external-openssl 而使用https://github.com/guardianproject/openssl-android 解决了这个问题。

    它基于更新的 OpenSSL (1.0.0a),并且在 NDK 中构建,无需任何修改。

    请注意,要在 Android 应用中使用这些库,您必须重命名它们。如果您只是在应用程序中包含生成的 libssl.so 和 libcrypto.so,然后调用 System.LoadLibrary(“crypto”)和 System.LoadLibrary(“ssl”),您将获得 Android 系统中包含的 OpenSSL 库,而不是您的自定义库。

    为此,只需在每个 Android.mk(即 /crypto、/ssl , 和 /apps)。

    然后在您的 Android 应用中,调用 SystemLoadLibrary ("cryptox") 和 System.LoadLibrary ("sslx")

    【讨论】:

    • 您好,我正在尝试和您做同样的事情,我使用了 openssl-android,构建了源代码并获取了我的 .so 文件,但是在我的项目中使用它时遇到了问题,我使用这些库编写了 .c 文件,将其放入我的 jni 文件夹并编写了一个 Android.mk 文件,告诉我还使用了另外 2 个共享库,一切都编译良好,但在运行时崩溃并出现 UnsatisfiedLinkError,如果我们能谈谈就好了.
    猜你喜欢
    • 2011-02-26
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2012-08-05
    相关资源
    最近更新 更多