ndk无法获取可执行文件

时间:2014-12-16 09:44:05

标签: android android-ndk

建立一个简单的" 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

2 个答案:

答案 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可执行文件