2014-01-31 222 views
1

Iam尝试编译我的本机代码。这是我的android.mk文件Android NDK:将静态库链接到共享库

//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”模块。问题IAM面是我的irrlichttest模块首先编译,它开始寻找引用,并给我未定义的引用error.Right现在如果我编译part1(静态库)只有它成功地生成libirrlicht.a,但与part2它开始给我错误。

回答

4

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

删除CD3D8Driver.cpp后的\,应该修复它。

2

NDK将编译irrlic然后创建libirrlich.a,然后才会链接libirrlichttest.so。这是很有见地的运行

ndk-build clean all V=1 

并查看实际执行建设项目哪些命令生成日志。

相关问题