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 文件内容 中。

时间: 2024-10-14 16:57:01

NDK 编译问题概述的相关文章

arm 及ndk编译

首页  »   Android android的armeabi跟armeabi-v7a 网友分享于:2014-03-16  浏览:867次 android的armeabi和armeabi-v7a 在ANE中如果SDK调用了so库,则需要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下. 可以贴个ADT代码说明问题: //m_configType.equals("apk") 是否是发行模式 //(hasCaptiv

Android NDK 编译加入so文件

在cocos2d-x中集成百度语音识别的时候,运行build_native.py会把libs/armeabi目录清空. 以下是解决办法,把so文件放在jni/prebuilt里面. 修改Android.mk文件,主要有两行include $(CLEAR_VARS) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #百度语音识别so LOCAL_MODULE := BDVoiceRecognitionClient_V1 LOCAL_SRC_FI

[原]如何用Android NDK编译FFmpeg

\我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库. 一.获取FFmpeg源码: 首先在编译之前,得获取一份FFmpeg的源码,如果你没有git并且也不打算使用,你可以去FFmpeg官网http://ffmpeg.org/

使用Android Studio自带的NDK编译JNI

/********************************************************************************** * 使用Android Studio自带的NDK编译JNI * 说明: * 省得自己另外去下载NDK,编译JNI,麻烦. * * 2017-4-30 深圳 龙华民治樟坑村 曾剑锋 ****************************************************************************

一个小玩具:NDK编译FFmpeg的例子

FFmpeg NDK编译 和最简单的APK 准备 硬件: 一台电脑,实验在Lenovo T430上 一个Android设备,实验在 三星S3/A7 编译环境: Ubuntu 14.04 (ant\java等命令必须支持) 工具包: NDK: https://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2 SDK:https://dl.google.com/android/adt/adt-bundle-linux-

[Android]Cygwin使用及NDK编译方法

在Windows XP, Cygwin, NDK SDK r5b下成功编译了ffmpeg,下面是完整的编译过程: 一.准备工作 2.下载Cygwin, 请猛击这里 3.下载Android SDK,请猛击这里,Android SDK的网页 4.下载Android NDK SDK r5b, 请猛击这里,NDK SDK的网页 5.下载ffmpeg,可以下载压缩包,也可以git一个snapshot 好了,有必要说明一下Android SDK和Android NDK SDK的区别: Android SDK

工作积累之NDK编译STL (zhuan)

方法: 1.在jni目录下新建Application.mk; 加入 APP_STL :=  stlport_static  右边的值还可以换成下面几个: system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持 stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的 stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用. gnust

anroid ndk编译ffmpeg 引用librtmp libx264

Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完成它,我没有仔细研究.我使用的方法完全可以达到我的预期目的. 一.选择编译环境 可以选择windows下cygwin,也可以选择linux系统,我建议选择后者.花了很多时间在cygwin下编译,configure时总是提示链接需要的so文件找不到.无奈 之下转到linux环境下编译.我用的版本是ub

NDK编译可执行文件在Android 中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。

由于使用了NDK编译的可执行文件在应用中调用,在Android 7.0上的运行情况发现,当运行该可执行文件时,报如下错误: error: only position independent executables (PIE) are supported. PIE这个安全机制从4.1引入,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的.因此不会报错.但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行.解决办法非常简单,在A