首页 > 代码库 > NDK 编译问题概述

NDK 编译问题概述

 

原帖地址:http://blog.sina.com.cn/s/blog_4c451e0e010148nr.html


 
项目编译成动态库是正常的,将 Android.mk 里面的 
include $(BUILD_SHARED_LIBRARY) 
改成
include $(BUILD_STATIC_LIBRARY)
编译静态库,
运行 ndk-build 却一点反应都没有,一闪而过。
 
解决方案:
在 工程目录\jni\ 目录下添加一个 Application.mk 文件,里面只写上如下一行代码:
APP_MODULES := lib库名
问题解决。
 
目录结构示意图:
工程目录
  |-jni
  |  |-*.c/*.h <--多个源文件
  |  |-Android.mk
  |  |-Application.mk
  |
  |-Application.mk
  
1.工程目录/jni/Android.mk 文件内容:
# 提供当前文件的路径,必须定义它在你的 Android.mk 文件的开始处
LOCAL_PATH := $(call my-dir)
 
# CLEAR_VARS 变量是由生成系统已提供的,
# 并且指出一个特殊的 GNU Makefile 文件为你清除除了 LOCAL_PATH 以外的许多的 LOCAL_* 变量,
# 这是必须的,因为全部的生成控制文件是在一个单独的 GNU Make 执行环境中被分析的,
# 在那里所有的变量是全局的。
include $(CLEAR_VARS)
 
# 该变量是必须定义的,用来标识你的 Android.mk 文件中描述的每个模块,
# 模块名字必须是唯一的,并且不能包含任何的空格。
LOCAL_MODULE:= 模块名字
 
# 该变量是必须包含将要生成且汇编成一个模块所需的 C / C++ 源文件的列表。
# 注意:不列出头文件和包含文件在这里,因为生成系统将自动地为你估算信赖。
LOCAL_SRC_FILES := 多个源代码文件(*.c)用空格分隔
 
# 一个可选的路径列表,做为 include 搜索路径之一。
LOCAL_C_INCLUDES := $(LOCAL_PATH)
 
#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_STATIC_LIBRARY)
 
2.工程目录/jni/Application.mk 文件内容:
# 该变量是可选的,指出你的应用程序工程名
APP_MODULES      := lib模块名字
 
3.工程目录/Application.mk 文件内容:
# 该文件是可选的,用来描述你的工程的更多细节,如:支持更多 CPU 以及替代编译器或链接器标志。
# 指出你的应用程序工程目录
APP_PROJECT_PATH := $(call my-dir)
 
# 默认情况下,NDK 生成系统将寻找一个名为 Android.mk 文件在 $(APP_PROJECT_PATH)/jni 目录下
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk
 
注:工程目录/jni/Application.mk 文件内容,
  在编译动态库时,可以合并到 工程目录/Application.mk 文件内容 中。

NDK 编译问题概述