Android NDK linking OpenSSL
Android NDK linking OpenSSL
我想在我的android ndk项目中使用openssl。
但是当我构建它时,我得到了这些错误:
Error:(38) undefined reference to
SSL_library_init' Error:(39) undefined reference to
SSL_load_error_strings'错误:(40)对OPENSSL_add_all_algorithms_noconf' Error:(42) undefined reference to
CRYPTO_num_locks的未定义引用错误:(45)对CRYPTO_set_locking_callback' Error:(46) undefined reference to
CRYPTO_set_id_callback的未定义引用等
我已经包含了两个文件到Android。Mk(一个到ssl,一个到crypto):
//libcrypto.mk
include $(CLEAR_VARS)
LOCAL_MODULE := ssl-crypto
LOCAL_SRC_FILES := ../libs/system/$(TARGET_ARCH_ABI)/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)
//libssl.mk
include $(CLEAR_VARS)
LOCAL_MODULE := ssl-ssl
LOCAL_SRC_FILES := ../libs/system/$(TARGET_ARCH_ABI)/libssl.so
include $(PREBUILT_SHARED_LIBRARY)
我已经把这个添加到app/build.gradle:
stl = "gnustl_static"
cppFlags += "-I${file("../../../../support-lib/jni")}".toString()
cppFlags += "-I${file("../../../generated-src/cpp")}".toString()
cppFlags += "-I${file("../../../taps-api")}".toString()
cppFlags += "-I${file("../../../include")}".toString()
cppFlags += "-std=c++11"
cppFlags += "-DASIO_STANDALONE"
cppFlags += "-lssl"
cppFlags += "-lcrypto"
我使用c++中的openssl,并使用dropbox/djinni生成jni包装器。另外,我正在使用Android Studio 1.3 stable和gradle 2.5
编辑:我改变了我的体型。应用中的Gradle:
abiFilters += "armeabi"
abiFilters += "armeabi-v7a"
abiFilters += "x86"
abiFilters += "mips"
ldLibs += ['ssl', 'crypto']
android.sources {
main {
jniLibs {
source {
srcDirs 'jni/libs'
}
}
}
它工作了,但是应用程序崩溃了(因为它在apk的错误目录中搜索库…)。我还发现,在新的实验gradle最近不支持这个"第三方共享库包括的东西"。所以我只能等了。(我也可以尝试一些与makefiles,但默认情况下他们跳过了AS)
我不相信你可以在你的应用程序中有这样的共享库,你只能用System.loadLibrary()从Java加载一个so对象
你需要静态编译OpenSSL到你的c++代码的其余部分(如链接。a加密和SSL库)
下面是一个例子
https://github.com/gcesarmza/curl-android-ios/blob/master/test-android-project/app/src/main/jni/Android.mkcurl Android iOS项目就是这样做的,值得一看https://github.com/gcesarmza/curl-android-ios
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 如何在openssl-ecc中获取十六进制格式的私钥
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- OpenSSL TLS服务器-使用客户端证书白名单
- 通过 Openssl 命令行加密,通过 c++ 解密
- 使用已使用 java 编码的 openssl 解码数据
- OpenSSL没有共享密码
- OpenSSL 解密功能无法正常工作
- OpenSSL BIO and SSL_read
- 如何在OpenSSL库的名称中添加后缀'd'?
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- Linking library C++
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- 在 C/C++ 中加载 OpenSSL 自定义引擎
- 我的应用程序无法在安卓上使用OpenSSL进行链接
- Android NDK linking OpenSSL