Android笔记---开发 NDK 编译和使用静态库、动态库

转载 2015年11月21日 17:04:00
本文转载自:http://blog.csdn.net/heng615975867/article/details/11904737
  1. 在eclipse工程目录下建立一个jni的文件夹。
  2. 在jni文件夹中建立Android.mk和Application.mk文件。

Android.mk文件:

Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。详见附件中的Android.mk。

 

Application.mk文件:

定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库)、APP_PLATFORM := android-9(使用android-9以上的平台库)。

  1. 用cd命令移至jni目录,运行/mnt/500G/public/NDK/android-ndk-r7b/ndk-build命令,这时命令行中可能会出现编译错误,比如头文件找不到,函数找不到等等,细心找找就能改掉。
  2. 编译成功后,在工程目录下libs/x86中就会生成你想要的.so库。

NDK 编译和使用静态库、动态库

情况一:编译静态库

情况二:编译动态库

情况三:编译动态库+静态库

情况四:已有第三方静态库(动态库),编译静态库(动态库)


默认所有代码和文件在$project/jni下,否则特殊说明。

情况一:编译静态库

文件Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_STATIC_LIBRARY)


文件Application.mk:

APP_MODULES :=hello-jni


情况二:编译动态库

文件Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)

情况三:编译动态库+静态库

文件Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_static
LOCAL_SRC_FILES := src.c
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_shared
LOCAL_SRC_FILES := src2.c

LOCAL_STATIC_LIBRARIES := mylib_static

include $(BUILD_SHARED_LIBRARY)

情况四:已有第三方静态库(动态库),编译静态库(动态库)

文件Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := thirdlib1      # name it whatever
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libthird1.a     # or $(so_path)/libthird1.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)    #or PREBUILT_SHARED_LIBRARY

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_use_thirdlib
LOCAL_SRC_FILES := src.c

LOCAL_STATIC_LIBRARIES := thirdlib1       #or LOCAL_SHARED_LIBRARY 

include $(BUILD_SHARED_LIBRARY)   #如果编译静态库,需要Application.mk

相关文章推荐

android开发 NDK 编译和使用静态库、动态库

在eclipse工程目录下建立一个jni的文件夹。在jni文件夹中建立Android.mk和Application.mk文件。 Android.mk文件: Android提供的一种make...

windows下使用cmake和ndk编译android所用动态库.so和静态库.a

不在linux上编译android所用.a和.so,在windows上如何编译呢?  1.准备工作: 1.vs2008,别的版本vs应该也可以,我用的就是2008; 2.cmake,下载个最新的版本...
  • zmscs
  • zmscs
  • 2015年03月17日 22:36
  • 2717

NDK 编译和使用静态库、动态库; Android.mk 文件语法详解; Android.mk高级写法

以下所有是基于Eclipse的,使用命令行的绕道。  1、STL的使用,以stlport为例  官方的说法是只需要在Application.mk文件中添加如下一行即可  Application...

Jni中执行ndk-build,编译第三方静态库(.a)和动态库(.so)的Android.mk文件写法

Jni中执行ndk-build,编译第三方静态库(.a)和动态库(.so)的Android.mk文件写法 Android Studio编译JNI接口,当需要调用第三方静态库或者动态库时,正确...

android NDK 使用(多个)静态库生成动态库

1、编写Android.mk文件:如下两种方式都可以,用于NDK编译工具生成的两个.a文件来生成最终的libtwolib-second.so 动态库。 [java] view p...

android NDK学习篇3之two-libs——使用(多个)静态库生成动态库

还要以NDK提供的two-libs为例子,走一遍多个静态库(.a文件)生成动态库(.so文件)的流程。 1、建立android工程,编写java对应JNI层的本地接口: package com.ex...

android NDK学习篇2之two-libs——使用(单个)静态库生成动态库

下面以NDK提供的two-libs为例子,走一遍如何在jni层调用其他C文件的函数,原例子在second.c这个jni层文件中调用first.c里面的C函数。 通过Androi.mk文件编译生成一个动...

Android NDK生成及连接静态库与动态库

对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用。但是在某些情况下,我们需要借助C/C++来写JNI本地代码。比如,在使用跨平台的第三方库的时候;为了提升密集计算性能的时...

android编译openssl静态库.a 动态库.so

  • 2017年08月09日 18:06
  • 14.21MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android笔记---开发 NDK 编译和使用静态库、动态库
举报原因:
原因补充:

(最多只允许输入30个字)