我有 2 个不同库的源代码,FooMain 和 FooSecondary。FooSecondary 被 FooMain 使用,所以,makefile 必须先编译 FooSecondary,然后编译 FooMain,然后将 FooSecondary 链接到 FooMain。
我的 Android.mk 是:
LOCAL_PATH:= $(调用我的目录) # Foo 二级库: # 清除变量 包括 $(CLEAR_VARS) # 目标构建 LOCAL_ARM_MODE := 手臂 # 库名称 LOCAL_MODULE := FooSecondary # 将所有 SRC_FILES 设置在一起 SRC_FILES := $(通配符 $(LOCAL_PATH)/FooSecondary/src/*.c) SRC_FILES := $(SRC_FILES:$(LOCAL_PATH)/%=%) LOCAL_SRC_FILES = $(SRC_FILES) # 启用日志支持 LOCAL_LDLIBS = -llog # C 标志 - 最大优化 LOCAL_CFLAGS := -O3 -mno-thumb # C++ 标志 - 最大优化 LOCAL_CPPFLAGS := -O3 -mno-thumb # 编译为共享库 包括 $(BUILD_SHARED_LIBRARY) # Foo 二级库: # 清除变量 包括 $(CLEAR_VARS) # 包含 OpenCV 包括 3rdparty/OpenCV-2.4.3-rc-android-sdk/sdk/native/jni/OpenCV.mk # 目标构建 LOCAL_ARM_MODE := 手臂 # 库名称 LOCAL_MODULE := FooMain # 将所有 SRC_FILES 设置在一起 SRC_FILES := $(通配符 $(LOCAL_PATH)/FooMain/src/*.cpp) SRC_FILES := $(SRC_FILES:$(LOCAL_PATH)/%=%) LOCAL_SRC_FILES = $(SRC_FILES) LOCAL_SHARED_LIBRARIES := libFooSecondary LOCAL_LDLIBS := -L$(LOCAL_PATH)/../libs/armeabi LOCAL_LDLIBS += -lz -lm -ldl -lGLESv2 -lEGL -llog -lFooSecondary LOCAL_CFLAGS := -O2 -mno-thumb -Wno-write-strings LOCAL_CPPFLAGS := -O2 -mno-thumb -Wno-write-strings # 编译为共享库 包括 $(BUILD_SHARED_LIBRARY)
我的 Application.mk 是:
APP_CPPFLAGS := -frtti -fexceptions APP_STL := gnustl_static APP_ABI := armeabi-v7a
但是,当我使用 ndk-build 编译 Android.mk 时,会出现下一个错误:
Compile arm : libFooSecondary <= *.c
SharedLibrary : libFooSecondary.so
Install : libFooSecondary.so => libs/armeabi-v7a/libFooSecondary.so
SharedLibrary : libFooMain.so
/home/user/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: cannot find -lFooSecondary
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/libFooMain.so] Error 1
如果正确编译和安装,为什么找不到 libFooSecondary.so?
另外,如果 LOCAL_MODULE 名称更改,例如,第一个是 LOCAL_MODULE := zname 而第二个是 LOCAL_MODULE := aname,则首先编译第二个,我不知道为什么。