0

我正在开发使用一些 Android 私有 API 的应用程序。我将它构建为为我的手机配置的完整 Android (CM10) 源的一部分。生成的二进制文件在该设备上运行良好,但在具有相同 Android 版本的其他设备上会引发分段错误。这不是缺少 API 的问题,因为即使是以这种方式编译的简单的 hello world 也会引发 Segfault。这是一个示例代码:

你好-cmd.cpp

#include<stdio.h>

int main(int argc, char* argv[]) {
    printf("Hello Command Line!");
    return 0;
}

安卓.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-cmd
LOCAL_SRC_FILES := hello-cmd.cpp
include $(BUILD_EXECUTABLE)

当我使用 Android NDK 构建以下代码时,它是可移植的。当我在 android 源代码中构建它时,它不是。

我想问题是链接器配置,但我不知道如何调试或修复它。

4

1 回答 1

0

我终于弄清楚了问题所在。这两款设备使用了不同的 Android 版本,具有不兼容的 C++ 编译器标志。将两个设备更新到完全相同的版本后,问题就消失了。

虽然无法使用私有 Android API 编译单个可移植二进制文件,但可以为每个主要 Android 版本编译单独的二进制文件并将它们与应用程序一起发布。我在我的博客上更详细地描述了这个解决方案。

于 2013-09-12T10:33:22.113 回答