0

我的 Android 应用程序(游戏)使用本机 C++ 代码进行某些操作。也就是说,我使用的是Android NDK。本机 C++ 代码仅针对armeabi编译(默认为armeabi-v5)。

我最后一次将我的 c++ 代码构建到nativestuff.so是几个月前,在另一台计算机上(Windows 7 + cygwin,因为建议使用 cygwin 与 Android NDK 一起编译)。

我刚刚在我当前的 PC (Windows 7) 上安装了 NDK,以及最新的 cygwin,并为我的应用程序重新构建了 c++ 代码。

令我惊讶的是,它生成了一个.so14KB 的文件,而之前的.so文件是 37KB。请注意,c++ 源文件完全相同(它们已经一年没有更改),我的项目处于版本控制之下,所以我 100% 确定。

我在游戏中测试了 c++ 功能,它和以前一样工作,没有任何错误。

我的 C++ 文件仅使用cstring.hjni.h包含在内。我Android.mk的如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := nativestuff
LOCAL_SRC_FILES := nativestuff.cpp

include $(BUILD_SHARED_LIBRARY)

知道为什么文件大小会发生巨大变化.so吗?

(我linux也在这个问题中添加了标签,因为也许这是一个普遍的事情,所以我想确保 linux 大师也检查它。)

4

3 回答 3

2

objdump -x file.so在两个版本上运行。这将列出所有部分及其大小。这应该会给你一个关于问题所在的线索。(即是否有一个 23KB 长的新 .debug 部分?也许调试模式已启用。)

如果您的代码部分完全不同,请比较objdump -d file.so. 也许你的编译器会自动内联更多代码,从而节省了大量空间。

如果另一个部分是新的/不同的,请在另一个 SO 问题中发布输出。

于 2013-07-14T15:48:17.677 回答
1

您可以尝试一件事:使用命令大小可执行文件名。这将为您提供可执行代码不同区域的大小。如果以前的版本可用,请执行相同的操作。您可能会知道变化在哪里。

于 2013-07-14T04:47:32.360 回答
1

也许之前的 .so 是使用调试信息生成的。
(使用 gcc -g 选项编译)

于 2013-07-14T03:08:00.163 回答