Android NDK链接OpenSSL
我想在我的android ndk项目中使用openssl 但当我构建它时,我得到了以下错误: 错误:(38)未定义对Android NDK链接OpenSSL,android,c++,android-ndk,openssl,djinni,Android,C++,Android Ndk,Openssl,Djinni,我想在我的android ndk项目中使用openssl 但当我构建它时,我得到了以下错误: 错误:(38)未定义对SSL\u library\u init'的引用 错误:(39)未定义对SSL\u加载\u错误\u字符串的引用' 错误:(40)未定义对OPENSSL\u add\u all\u algorithms\u noconf'的引用 错误:(42)未定义对CRYPTO_num_locks'的引用 错误:(45)对CRYPTO\u set\u locking\u callback'的引用未
SSL\u library\u init'的引用
错误:(39)未定义对
SSL\u加载\u错误\u字符串的引用'
错误:(40)未定义对OPENSSL\u add\u all\u algorithms\u noconf'的引用
错误:(42)未定义对
CRYPTO_num_locks'的引用
错误:(45)对CRYPTO\u set\u locking\u callback'的引用未定义
错误:(46)对
CRYPTO\u set\u id\u回调的引用未定义
等等
我在Android.mk中包含了两个文件(一个到ssl,一个到crypto):
我在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 /djNi生成JNI包装器。
我也在使用Android Studio 1.3 stable和gradle 2.5
编辑:
我在应用程序中更改了build.gradle:
abiFilters += "armeabi"
abiFilters += "armeabi-v7a"
abiFilters += "x86"
abiFilters += "mips"
ldLibs += ['ssl', 'crypto']
android.sources {
main {
jniLibs {
source {
srcDirs 'jni/libs'
}
}
}
它工作了,但应用程序崩溃了(因为它正在apk中的错误目录中搜索libs…)。
我还发现,在最近的一次新的实验中,gradle不支持这种“第三方共享库,包括东西”。所以我不得不等待。
(我也可以尝试使用makefiles,但默认情况下它们被AS跳过)我不相信你的应用程序中可以有这样的共享库,你只能使用System.loadLibrary()从Java加载so对象 您需要将OpenSSL静态编译到C++代码的其余部分中(如链接中的密码和SSL库) 这里有一个例子
curl安卓iOS项目就是这样做的,值得一看哦,伙计。。。Android原生构建系统很糟糕。Android Studio过去很糟糕,因为它缺乏JNI支持。如果可能,您可以尝试使用OpenSSL wiki。至少,你应该启动OpenSSL脚本,让OpenSSL推荐的
CFLAGS
在Android的构建系统下使用。是的,谢谢你的建议:D不幸的是,我在windows上,所以我不能用shellscript做任何事:((我试过用msys2,但没用)也许最简单的解决方案是在VirtualBox中安装Ubuntu。
abiFilters += "armeabi"
abiFilters += "armeabi-v7a"
abiFilters += "x86"
abiFilters += "mips"
ldLibs += ['ssl', 'crypto']
android.sources {
main {
jniLibs {
source {
srcDirs 'jni/libs'
}
}
}