1、lame c库:

https://github.com/intervigilium/liblame

下载后解压,进入目录,terminal里运行ndk-build即可

2、lame android库

https://github.com/intervigilium/Lame4Android

需要引用上面编译好的.so文件

3、方法1里的lame的源码可能不是最新的,我们可以下载最新的lame
http://lame.sourceforge.net/download.php

a、解压,复制lame-3.99.5/libmp3lame 到jni目录里,改名为lame

b、拷贝 lame.h (include目录下),至jni/lame.h

c、创建jni/Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := lame
LOCAL_CLFAGS := -std=c99
LOCAL_LDLIBS := -llog

LOCAL_SRC_FILES := lame/bitstream.c lame/fft.c lame/id3tag.c lame/mpglib_interface.c lame/presets.c lame/quantize.c lame/reservoir.c lame/tables.c lame/util.c lame/VbrTag.c lame/encoder.c lame/gain_analysis.c lame/lame.c lame/newmdct.c lame/psymodel.c lame/quantize_pvt.c lame/set_get.c lame/takehiro.c lame/vbrquantize.c lame/version.c

include $(BUILD_SHARED_LIBRARY)

d、创建jni/Application.mk,内容如下

APP_ABI := armeabi armeabi-v7a arm64-v8a x86_64
APP_MODULES := lame
APP_CFLAGS += -DSTDC_HEADERS
#APP_ABI:=x86_64
#APP_PLATFORM := android-21

4、terminal里运行ndk-build,编译后的so文件放在libs里

说明:

Application.mk里要加APP_CFLAGS += -DSTDC_HEADERS,不然会报错undefined reference to `bcopy'等错误

删除非.c/.h文件:GNU autotools, Makefile.am Makefile.in libmp3lame_vc8.vcproj logoe.ico depcomp, folders i386 等无用文件。
编辑 jni/utils.h。把extern ieee754_float32_t fast_log2(ieee754_float32_t x);替换为extern float fast_log2(float x);。如果忘了替换,编译时会报出以下错误:
  1. [armeabi] Compile thumb  : mp3lame <= bitstream.c
  2. In file included from jni/bitstream.c:36:0:
  3. jni/util.h:574:5: error: unknown type name 'ieee754_float32_t'
  4. jni/util.h:574:40: error: unknown type name 'ieee754_float32_t'
  5. make.exe: *** [obj/local/armeabi/objs/mp3lame/bitstream.o] Error 1

ndk编译android的lame库的更多相关文章

  1. protobuf使用NDK编译Android的静态库(工作记录)

    1.protobuf 编译过程 前提: 确保自己电脑上已经安装了cygwin + ndk, 并且NDK能够编译hello-jni成功 1.1 把protobuf 压缩包解压到protobuf文件夹下 ...

  2. Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误

    在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...

  3. android开发 NDK 编译和使用静态库、动态库 (转)

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

  4. macos下命令行通过ndk编译android下可以执行的ELF程序(并验证opencl的调用)

    源码如下,实现把一个JPG保存成灰度图格式的BMP 1 //jpg2bmp.cpp 2 #include <stdio.h> 3 #include <inttypes.h> 4 ...

  5. Windows SublimeText内使用NDK编译Android so(不用cygwin)

    測试环境: sublime text version 2.0.2, build 2221 和 sublime text stable channel, build 3065 (version3) Wi ...

  6. 浅谈独立使用NDK编译库文件(Android)

    阅读前准备 这是一篇相对入门的文章.文中会涉及到少许NDK的知识,但个人认为对初学者来说都相对比较实用,因为都是在平时项目中遇到的(目前自己也是初学者).一些其他高深的技术不再本文探讨范围之内(因为我 ...

  7. anroid ndk编译ffmpeg 引用librtmp libx264

    Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完 ...

  8. 【转】如何把ndk编译出来的可执行文件伪装成so打包到apk中

    原文网址:http://jeyechao.iteye.com/blog/2164286 ndk编译出来的共享库,eclipse会自动打包到apk中,而编译出来的可执行文件则不会. 要想可执行文件自动被 ...

  9. ndk 编译 c++ 兼容性问题汇总整理

    转自:http://blog.csdn.net/wenrenwang/article/details/12003671 1.__int64找不到符号 采用int64_t来代替: #if defined ...

随机推荐

  1. Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器

    目录(?)[-] 一VisualVM是什么 二如何获取VisualVM 三获取那个版本 四VisualVM能做什么 显示JAVA应用程序配置和运行时环境 显示本地和远程JAVA应用程序运行状态 监控应 ...

  2. Android立刻终止一个线程

    /** * Created by JuTao on 2017/2/4. * 如何中止一个线程 */ public class ThreadDone { public static void main( ...

  3. 前端页面——Cookie与Session有什么差别

    我们在实际生活中总会遇到这种事情,我们一旦登录(首次输入username和password)某个站点之后,当我们再次訪问的时候(仅仅要不关闭浏览器),无需再次登录.而当我们在这个站点浏览一段时间后,它 ...

  4. 安卓开发笔记——WebView组件

    我们专业方向本是JAVA Web,这学期突然来了个手机App开发的课设,对于安卓这块,之前自学过一段时间,有些东西太久没用已经淡忘了 准备随笔记录些复习笔记,也当做温故知新吧~ 1.什么是WebVie ...

  5. 在ListView中使用GridView, Style这样写:

    参考:http://msdn.microsoft.com/zh-cn/library/vstudio/ms788747.aspx 需求,自定义ListView中的滚动条 这岂不是很简单?刷刷刷写完了, ...

  6. js中判断浏览器版本

    var ai = { ovb: { /** * 该对象用于判断系统,系统版本,浏览器,苹果设备等等功能.ovb是单词 Os Version Browser 的头字母缩写. */ _version_va ...

  7. 【jmeter】 jmeter 测试HTTP接口

    到apache官网下载jmeter:http://jmeter.apache.org/download_jmeter.cgi 1.运行 bin/jmeter.bat ,添加线程组 2.添加HTTP请求 ...

  8. 【转】WCF OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout

    关于这四个属性,在MSDN中的解释有点敷衍了事.Open/Close/Receive/Send本是HTTP/TCP/SOCKET的概念,Read/Write Operation则是Web Servic ...

  9. oracle 定义带参数的视图

    1.定义包 CREATE OR REPLACE package p_view_param is --定义开始日期-- function set_beginTime(beginTime varchar2 ...

  10. Android 程序打包及签名(转)

    为什么要签名??? 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的. 由于开发商可能通过使用相同的Package Name来 ...