将现有的ARM for Arm移植到Intel X86

时间:2014-08-08 19:30:30

标签: android sdk android-ndk

我是一个使用Android的新手,但我遇到了一个我似乎无法找到答案的问题......

所以我有一个Android应用程序,我可以使用gcc编译并针对ARM架构 - 一切都很好,工作完美。

我们发现应用程序与Windows构建相比运行缓慢,因此我尝试使用X86作为目标。一切似乎工作正常,但是当我试图包含某个库时,我发现了一个错误 - elastique音频时间拉伸lib。我收到这个错误:

[x86] StaticLibrary  : libcpufeatures.a
[x86] SharedLibrary  : libjuce_jni.so
/Applications/BeaconMountain/NDK/toolchains/x86-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/i686-linux-android/4.8/../../../../i686-linux-android/bin/ld: error: jni/../../../elastique/lib/android/libelastiqueEfficient.a(elastiqueAPI.cpp.o): incompatible target
jni/../../../AudioStreamData.cpp:778: error: undefined reference to 'CElastiqueIf::DestroyInstance(CElastiqueIf*)'

我的老板建议可能是这些库只是为ARM构建的..这里有解决方法吗?或者只是如果libs不是为同一个目标构建的,那么答案就是答案,那么我们就是sol??

提前致谢!!

1 个答案:

答案 0 :(得分:0)

您尝试包含的库确实是为ARM构建的,因此是incompatible target消息。

我不知道此SDK以及您如何将其包含在Android上。但如果你有类似的东西:

LOCAL_SRC_FILES := elastique/lib/android/libelastiqueEfficient.a

在Android.mk文件中,这意味着当您定位任何支持NDK的平台(armv5,armv7,x86,mips以及现在的所有64位拱门)时,总是会包含相同的预编译器。

包含的预构建的lib应始终依赖于目标体系结构。一个正确的方法是在elastique/lib/android/下为每个目标架构创建一个子文件夹(这里通过创建armeabi-v7a,armeabi,x86 ......)文件夹,并在每个文件夹中都有正确的libelastiqueEfficient.a 。在这种情况下,您将更改Android.mk中的当前引用:

LOCAL_SRC_FILES := elastique/lib/android/$(TARGET_ARCH_ABI)/libelastiqueEfficient.a

但正如你正确猜到的那样:你需要为每个目标构建这个库,并且没有解决方法。您仍然可以联系编辑,要求他修复其Android支持。