Android ndk can';无法获取可执行文件
只需使用androidAndroid ndk can';无法获取可执行文件,android,android-ndk,Android,Android Ndk,只需使用androidndk构建一个简单的“helloworld”,但我得到了shard对象,我应该得到可执行文件。在我把这个文件推到我的arm模拟器后,我得到了一个分段错误,但真正的设备是正常的。有什么问题吗? 这是我的操作系统版本: Darwin avator 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64 i386 M
ndk
构建一个简单的“helloworld”,但我得到了shard对象,我应该得到可执行文件。在我把这个文件推到我的arm模拟器后,我得到了一个分段错误,但真正的设备是正常的。有什么问题吗?
这是我的操作系统版本:
Darwin avator 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64 i386 MacBookPro11,1 Darwin
这是我的Android.mk
:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test-libstl
LOCAL_SRC_FILES := test-libstl.cpp
include $(BUILD_EXECUTABLE)
在ndk build
之后,我得到了文件:
$file ../libs/arm64-v8a/test-libstl
../libs/arm64-v8a/test-libstl: ELF 64-bit LSB shared object, version 1 (SYSV), dynamically linked (uses shared libs), stripped
这本身并不是一个错误-它只是将位置无关的可执行文件(PIE)解释为共享对象的
文件
实用程序-您的可执行文件构建得很好
只有Android 4.1和更新版本支持PIE可执行文件,在5.0上,不再允许使用非PIE可执行文件-这可能是您无法在emulator中运行它的原因。有关此问题的更多详细信息,请参阅。如果NDK中的目标平台是Android 4.1或更高版本(Android-16),则可执行文件将在启用饼图的情况下生成。尝试使用本地\u LDFLAGS:=-static
它帮助我获得一个ELF 64位LSB可执行文件。这对我真的很有帮助,我的模拟器版本是4.0,真正的设备是4.4。还有两个问题:1.PIE在android 4.1及更新版本上是必须的吗?2.我得到了另一个可以在emulator 4.0上运行的文件,
文件
显示:ELF 32位LSB可执行文件,ARM,版本1(SYSV),动态链接(使用共享libs),剥离
,对此我有点困惑。这个文件是馅饼吗?不,PIE在android 4.1上不是必须的,但在5.0上却是必须的。第二个文件,file
表示是一个可执行文件,它不是PIE,也不会在5.0上运行。我如何构建可以在Android 4.0上运行的非PIE可执行文件?我尝试在Application.mk
中设置APP_PIE:=false
和APP_PLATFORM:=Android-9
,但是它没有生效。我的ndk是r10。似乎设置APP\u PIE:=false
没有任何效果-您只能在尚未启用的情况下使用APP\u PIE:=true
来启用它。但是APP\u PLATFORM:=android-9
在Application.mk
中确实应该可以工作——当我在本地试用时,它确实可以工作。您是否确定Application.mk
已正确放置(在jni
子目录中)?尝试在NDK build
调用的末尾添加NDK_LOG=1
,以获取更多日志记录,这些日志记录可能会为正在发生的事情提供线索。Application.mk
是它应该做的事情,添加NDK_LOG=1
给出如下相关信息:Android NDK:APP_PIE为假Android NDK:Application local targets未知平台“Android-9”Android NDK:Switching to Android-L
。