【问题标题】:Changes in Android.mk not changing libsAndroid.mk 中的更改不会更改库
【发布时间】:2012-07-03 04:53:12
【问题描述】:

我正在尝试获取我的 Android.mk 文件来优化二进制文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := fred
LOCAL_SRC_FILES := fred.c
LOCAL_LDLIBS := -llog
LOCAL_CFLAGS = -O3
NDKDEBUG = 0

include $(BUILD_SHARED_LIBRARY)

然后我保存并运行

$NDK/ndk-build -B V=1

然后我在生成的库上运行 md5sum,它与使用构建的库没有区别

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := fred
LOCAL_SRC_FILES := fred.c
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

那么,我做错了什么?

编译器的输出似乎是:

/home/AStupidNoob/Documents/Android/android-ndk-r7b/toolchains/arm-linux-androideabi-
4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc -MMD -MP -MF /home/AStupidNoob
/workspace/Fred/obj/local/armeabi/objs/fred/fred.o.d -fpic -ffunction-sections -funwind-
tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ 
-D__ARM_ARCH_5TE__  -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os 
-fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/home/AStupidNoob
/workspace/Fred/jni -DANDROID -O3 -Wa,--noexecstack -O2 -DNDEBUG -g -I/home/AStupidNoob
/Documents/Android/android-ndk-r7b/platforms/android-4/arch-arm/usr/include -c  
/home/AStupidNoob/workspace/Fred/jni/fred.c -o /home/AStupidNoob/workspace/Fred/obj
/local/armeabi/objs/fred/fred.o

我不确定这是否可以,但似乎问题可能出在 3 个优化标志上,-Os -O2 -O3,但我该如何解决这个问题?

谢谢!

【问题讨论】:

    标签: android makefile android-ndk java-native-interface


    【解决方案1】:

    查看APP_OPTIM 变量。我在 Application.mk 文件中将我的设置为 release 以优化代码。 (我不确定您是否可以通过这种方式通过各种-O# 选项获得所需的粒度,但至少您得到了一些东西。)

    【讨论】:

    • 感谢您的回复,但仍然无法正常工作。 APP_ABI := all APP_OPTIM = release NDKDEBUG = 0 是我的Application.mk 文件,md5 没有变化...
    • 很奇怪。请注意,在编译器命令中的 -O3 之后立即有“-O2 -DNDEBUG -g”,它几乎肯定会覆盖您正在尝试的内容。
    • 刚刚查看了 ndk-build 脚本及其调用的内容。我怀疑您的问题是您要比较的两个二进制文件是 both 发布版本(而不是两者都是调试版本)。尤其是add-application.mk(在 build/core 目录中)。我在上面指出的-O2 位已添加到那里。它们会在您的 LOCAL_C_FLAGS 之后添加到命令行,因此它们将优先于您在此处指定的任何 -O#
    • 非常感谢!看起来很奇怪,构建脚本会覆盖我指定的任何东西,而其他人似乎对此没有任何问题。另一件事:符号没有被剥离(用十六进制编辑器检查)。因此,这些仍然是调试版本。有任何想法吗?不过还是谢谢。
    • 是的,这就是add-application.mk 中的注释和代码。在这两种情况下,debugrelease,它都会留下-g 标志,因为引用评论,“我们生成二进制文件的符号版本,这些版本在被复制到最终项目的库/ 目录。”我想知道您是否没有进行最后的剥离。
    猜你喜欢
    • 2013-04-30
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2016-06-22
    • 2014-02-04
    • 2019-10-03
    • 2014-01-26
    相关资源
    最近更新 更多