1

我正在尝试编译我的本机代码。这是我的 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 模块首先编译,它开始寻找参考并给我未定义的参考错误。现在如果我只编译第 1 部分(静态库)它成功生成了 libirrlicht.a,但是在第 2 部分它开始给我错误。我做错了什么。

4

2 回答 2

4

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

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

于 2014-02-03T03:08:18.677 回答
2

NDK 将编译 irrlichttest 源代码,然后是 irrlich 源代码,然后创建 libirrlich.a,然后才会链接 libirrlichttest.so。运行非常有见地

ndk-build clean all V=1

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

于 2014-01-31T13:02:00.933 回答