Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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 dlopen失败:找不到符号";cblas_SDOT“;引用为;libgsl.so”一词;_Android_C++_Linux_Android Ndk_Gsl - Fatal编程技术网

Android dlopen失败:找不到符号";cblas_SDOT“;引用为;libgsl.so”一词;

Android dlopen失败:找不到符号";cblas_SDOT“;引用为;libgsl.so”一词;,android,c++,linux,android-ndk,gsl,Android,C++,Linux,Android Ndk,Gsl,我根据本文提供的答案,使用arm linux AndroidABI编译器为android交叉编译了gsl。我在/home/username/AndroidGSL中安装了库。我检查了文件命令,它给了我 libgsl.so: symbolic link to `libgsl.so.0.14.0' 所以我又为libgsl.so.0.14.0做了一次,得到了这个 libgsl.so.0.14.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1

我根据本文提供的答案,使用arm linux AndroidABI编译器为android交叉编译了
gsl
。我在
/home/username/AndroidGSL
中安装了库。我检查了
文件
命令,它给了我

libgsl.so: symbolic link to `libgsl.so.0.14.0' 
所以我又为
libgsl.so.0.14.0
做了一次,得到了这个

libgsl.so.0.14.0: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
这意味着它是为
android
正确编译的。然后我检查了
nm
命令

nm libgsl.so | grep cblas_sdsdot
我在图书馆里找到了这个符号

U cblas_sdsdot
这就是我加载库的方式

static
{

        System.loadLibrary("gnustl_shared");
        System.loadLibrary("gslcblas");
        System.loadLibrary("gsl");

}
我的Linux是64位的,我的gradle文件如下所示

compileSdkVersion 21
    buildToolsVersion '22.0.1'
    defaultConfig {
        applicationId "com.example.user.ndksample"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
}

我在你的另一篇帖子上回复了关于gsl的
。请按照这个程序。我希望它能帮助您,并且您可以轻松地在android应用程序中使用
static
lib。
这是

nm输出中的“U”表示该对象中的符号未定义。也许你需要在gsl图书馆之前加载cblas图书馆?我也这么做了,但还是没有运气。任何其他建议?您是否可以使用
nm
验证符号是否存在于使用过的gslcblas库中(如果是我假设的函数,则应显示
T
T
)?它是
T
。因为它是cblas_SDOT。所以它出现在cblas中,gsl正在链接它。至少,提供一个指向您的“回复”的链接。