Android dlopen失败:找不到符号";cblas_SDOT“;引用为;libgsl.so”一词;
我根据本文提供的答案,使用arm linux AndroidABI编译器为android交叉编译了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
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正在链接它。至少,提供一个指向您的“回复”的链接。