如何使用android-ndk优化本机代码(速度优化)

use*_*459 6 c++ optimization gcc clang android-ndk

我正在使用cygwin和Windows7编译本机代码.我在互联网上获得了很多优化技巧.

APP_OPTIM := release
ndk-build NDK_DEBUG=0
-DNDEBUG
LOCAL_CFLAGS += -O2
Run Code Online (Sandbox Code Playgroud)

但我无法理解如何在Application.mk和Android.mk上设置这些.我通过应用上述提示尝试了很多案例.但是,我不认为优化应用于我的本机代码.

Application.mk

APP_PROJECT_PATH := $(shell pwd)
APP_MODULES := native_lib
APP_OPTIM := release
APP_BUILD_SCRIPT := Android.mk
APP_ABI := armeabi
Run Code Online (Sandbox Code Playgroud)

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := lib/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := native_lib
LOCAL_SRC_FILES := nativeC.c \
                   AES/main.c \
                   AES/aes.c \  

LOCAL_C_INCLUDES := ./lib                  
LOCAL_SHARED_LIBRARIES := crypto
LOCAL_CFLAGS += -O2
LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
LOCAL_LDLIBS += -ldl
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

我希望有很多评论.


此外,

首先,我尝试比较上述标志与没有标志之间的情况.(例如,我用APP_OPTIM编译我的程序:=在Application.mk中发布,然后我在没有它的情况下编译或者再次使用APP_OPTIM:= debug编译.)但是,我看不到运行速度的任何变化.

其次,这是最重要的,我的程序比较两个模块的速度.(为方便起见,我称之为模块A,B)模块A是预构建的(在Android.mk中是libcrypto.so).我想在模块B中应用优化.首先,我比较了PC(Visual Studio 2010)中模块A和B的速度测试.当我在PC中尝试模块A和B时,模块B比A快.(当然,我预先编译了模块A,我通过调用库来使用它.)现在我将我的PC程序移植到它中对于Android.但在Android中,模块B比A慢得多.

因此,我的结论是,这没有得到优化.

综上所述,

  1. 我比较了旗帜和没有它的速度.
  2. 在PC中运行此程序时,预编译模块A比B快,但在Android中,它完全相反.

你认为我的程序问题是什么?先感谢您.

Ser*_* K. 13

APP_OPTIM:=发布

将该行APP_OPTIM := release放入Application.mk文件中

ndk-build NDK_DEBUG = 0

只需将NDK_DEBUG=0参数作为参数传递给ndk-build脚本即可.一旦定义,就不需要它了APP_OPTIM := release.

-DNDEBUG

这应该进入你的LOCAL_CFLAGS:

LOCAL_CFLAGS += -DNDEBUG
Run Code Online (Sandbox Code Playgroud)

LOCAL_CFLAGS + = - 02

实际上并不需要这样做,因为Android NDK已经定义了-O2优化.

  • 怎么样'-O3` (4认同)