我正在使用Cygwin和Windows7编译本地代码。
我在互联网上得到了许多优化提示。
APP_OPTIM := release
ndk-build NDK_DEBUG=0
-DNDEBUG
LOCAL_CFLAGS += -O2
但我不太明白如何在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
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)
我希望有很多评论。
此外,
首先,我尝试比较使用APP_OPTIM := release标志和不使用该标志的情况。 (例如,我在Application.mk中编译程序时使用了APP_OPTIM := release,然后我再次编译时没有使用它或使用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慢得太多了。
因此,我得出结论:这并没有进行优化。
总之,
- 我比较了使用标志和不使用标志的速度。
- 在PC上运行此程序时,预编译的模块A比B快,但在Android上完全相反。
您认为我的程序有什么问题吗?提前感谢您。
Intel
机器,而手机则是一台ARM
机器。如果你没有编写那段代码,如果你不知道细节,你就不能声称“因此,我得出结论这不是优化的”。 - auselen