Android NDK:将静态库与共享库链接

时间:2014-01-31 05:41:29

标签: android android-ndk irrlicht

我试图编译我的本机代码。这是我的android.mk文件

//part1-static lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := irrlicht
IRRLICHT_LIB_NAME := lib$(LOCAL_MODULE).a

LOCAL_C_INCLUDES := include

LOCAL_SRC_FILES := \    
CColorConverter.cpp \
CCSMLoader.cpp \
CCubeSceneNode.cpp \
CD3D8Driver.cpp \
include $(BUILD_STATIC_LIBRARY)

//part-2 shared lib
include $(CLEAR_VARS)
LOCAL_MODULE := irrlichttest
LOCAL_SRC_FILES := test-app.cpp test.cpp android-receiver.cpp
LOCAL_C_INCLUDES := include
LOCAL_CFLAGS := -O3 -DANDROID_NDK -DDISABLE_IMPORTGL -I$(LOCAL_PATH)/../include/ -  I./include/
LOCAL_CPPFLAGS := -Wno-error=format-security
LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lGLESv2
LOCAL_STATIC_LIBRARIES := irrlicht
include $(BUILD_SHARED_LIBRARY)

这是我的application.mk

APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-10
APP_MODULE := irrlicht irrlichttest

我想首先编译“irrlicht”模块然后再编译“irrlichttest”模块。我面临的问题是我的irrlichttest模块首先编译并开始寻找参考并给我未定义的引用错误。现在如果我编译part1(静态) lib)只有它成功生成了libirrlicht.a,但是对于part2它开始给我错误。我做错了什么。

2 个答案:

答案 0 :(得分:4)

在第一个LOCAL_SRC_FILES定义的末尾有一个额外的\,这使得'include $(BUILD_STATIC_LIBRARY)'部分进入LOCAL_SRC_FILES,并且永远不会解析/执行该行。换句话说,由于这个'iirlicht'模块的模块定义被ndk-build完全忽略,因此你看到了问题。

在CD3D8Driver.cpp之后删除\,这应该修复它。

答案 1 :(得分:2)

NDK将编译irrlichttest源,然后是irrlich源,然后创建libirrlich.a,之后它将链接libirrlichttest.so。运行

是非常有见地的
ndk-build clean all V=1

并在构建日志中查看实际执行哪些命令来构建项目。