Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK链接OpenSSL_Android_C++_Android Ndk_Openssl_Djinni - Fatal编程技术网

Android NDK链接OpenSSL

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'的引用未

我想在我的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'的引用未定义
错误:(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'
        }
   }
}