建立一个简单的" helloworld"使用android ndk
,但我得到了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
答案 0 :(得分:2)
这本身并不是一个错误 - 它只是将file
实用程序解释为位置无关的可执行文件(PIE)作为共享对象 - 您的可执行文件已经构建得很好。
只有Android 4.1及更高版本支持PIE可执行文件,而在5.0版本中,不再允许使用非PIE可执行文件 - 这可能是您无法在模拟器中运行它的原因。有关此问题的详细信息,请参阅Running a native library on Android L. error: only position independent executables (PIE) are supported。如果NDK中的目标平台是Android 4.1或更高版本(android-16),则可以在启用PIE的情况下构建可执行文件。
答案 1 :(得分:0)
尝试使用 LOCAL_LDFLAGS:= -static
它帮助我获得一个 ELF 64位LSB可执行文件。