标签:android android-studio android-ndk ndk-build openvpn
当我使用r10b 64位构建器编译project时,它编译良好而没有任何问题
我能够成功地在Lollipop中运行该项目,并且应用程序按预期运行
但是当我在运行时在JellyBean中运行项目时,我得到以下内容
错误
could not load library “libopenvpn.so” needed by
“/data/data/de.blinkt.openvpn/cache/pievpn.armeabi-v7a”; caused by
soinfo_relocate(linker.cpp:987): cannot locate symbol “srandom”
referenced by “libopenvpn.so”…CANNOT LINK EXECUTABLE
因此,当我研究I found时,由于使用64构建器而解决方案是使用32位构建器.
当我使用32构建器时,我在编译期间遇到以下错误.
Android NDK: NDK Application ‘local’ targets unknown ABI(s): arm64-v8a
x86_64 Android NDK: Please fix the APP_ABI definition in
./jni/Application.mk
/Users/ShajilShocker/Documents/Android/NDK/android-ndk-r10b/build/core/setup-app.mk:112:
*** Android NDK: Aborting . Stop.
所以如果我省略arm64-v8a和x86_64那么它可能会编译,但它似乎不会在64位设备上运行.
我是否有可能首先使用32位(注释64个体系结构)编译同一个项目,并使用64位(取消注释64个体系结构)进行编译并在两者上运行.
任何帮助都非常感谢!
谢谢 !
解决方法:
64位ARM&运行Lollipop的X86设备(不确定MIPS)可以执行32或64位本机代码(ARMv7a / ARMv8和X86 / X64). Android允许您将具有多个ABI(CPU特定代码)的本机代码库绑定到APK中.这些也称为“FAT”二进制文件.例如,要构建包含ARMv7a和ARMv8代码的FAT二进制文件,请将以下行添加到Application.mk文件中:
APP_ABI := arm64-v8a armeabi-v7a
然后,在Android.mk文件中,您可以为每种CPU类型添加特定设置:
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
<your custom ARM 32-bit build instructions here>
endif
ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
<your custom ARM 64-bit build instructions here>
endif
当您在32位系统上运行包含32位和64位代码的胖二进制文件时,它将加载32位代码,反之亦然.不需要在代码中有条件地编译每个目标设备.这就是胖二进制文件的目的 – 系统自动加载适合目标体系结构的库.
标签:android,android-studio,android-ndk,ndk-build,openvpn 来源: https://codeday.me/bug/20190829/1764291.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。