Author: Xiaoping Duan (Intel)

LAME 是目前最常用的一个开源MP3编码软件,从1998年12月至今,Lame已被越来越多人的公认为是MP3压缩的最佳利器。Lame编码出来的MP3音色纯厚、空间宽广、低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性。在这里我们就用它作例子来展示一下如何用英特尔的C++编译器来编译一个开源程序。LAME本身是一个跨平台的软件,支持常见的Windows和Linux平台,这里我们使用的是Linux系统。

1. 首先你要到LAME的网站上下载其源代码包(通常这是一个.tgz文件),然后把这个.tgz文件解压缩到一个目录下。解压缩过程会生成一个新的子目录,目录名通常就是lame后面跟上版本号。

2. 接下来我们要进入到生成的子目录中配置编译环境。通常如果使用的是系统缺省的GCC编译器的话我们只需简单的运行当前目录下的配置脚本“./configure”即可。但是由于这里我们打算使用英特尔编译器,所以我们得先配置好英特尔编译器的工作环境,然后再进行通常的编译配置。这可以通过运行下面的命令来完成:

B Shell环境:

source <英特尔编译器安装目录>/bin/iccvars.sh

或者

C Shell 环境:

source <英特尔编译器安装目录>/bin/iccvars.csh

3. 配置好英特尔编译器工作环境后可以运行”icc –V”命令来验证一下icc是否工作:
$ icc -V
Intel(R) C Compiler for applications running on IA-32, Version 10.1    Build 20080212 Package ID: l_cc_p_10.1.013
Copyright (C) 1985-2008 Intel Corporation.  All rights reserved.

4. 接下来我们回到通常的编译配置。这时我们就不能简单的运行configure脚本了,因为我们要指定英特尔编译器,而不是使用系统缺省的GCC:

./configure CC=icc CFLAGS="-fast" CXX=icpc CXXFLAGS="-fast" AR=xiar

5.  configure脚本运行完后会生成相应的make file,接下来再运行make命令就可以编译lame了。

6.  编译完毕后可以运行frontend目录下生成的lame来压缩一个wav文件,看看是否生成相应的mp3文件。

这里对configure命令中传的几个参数作一下简单的解释:

CC=icc              指明接下来的编译过程使用英特尔编译器icc来编译C语言.c文件
CFLAGS="-fast"      指明icc的编译选项用"-fast"。-fast的含义等同于“-xT -O3 -ipo -no-prec-div -static".-xT表明使用最新的Core 2微架构处理器提供的指令集,-O3表明使用最高的优化级别“3”,-no-prec-div指明使用乘倒数来替代除法,-static表示采用静态链接,-ipo表示要进行过程间的优化
CXX=icpc            指明编译过程使用英特尔编译器icpc来编译C++文件,即.cpp文件。
CXXFLAGS="-fast"    指明icpc编译.cpp文件时使用'-fast"选项
AR=xiar              指明编译过程中使用xiar而不是通常的ar来生成静态库.a文件。这里必须使用xiar的原因是因为我们在编译时期用了IPO优化,普通的ar程序无法处理含有IPO信息的.o文件,会导致最后的链接出现找不到某些函数符号的错误。使用英特尔的xiar就可以避免这个错误,因为xiar可以处理IPO.

提示:

1。 在编译的过程中会看到很多的warning警告信息,其中大部分可以忽略。这是因为英特尔编译器的语法检查要比GCC严格一些,编译时会报出更多的语言使用警告信息。如果你不想在屏幕上看到太多的警告信息的话,可以在CFLAGS和CXXFLAGS的参数中加入“-w”把所有的警告信息关掉。

2。编译过程中编译器会打印出很多类似下面的remark信息。

   psymodel.c(1846): (col. 2) remark: LOOP WAS VECTORIZED.
   psymodel.c(1771): (col. 2) remark: LOOP WAS VECTORIZED.
   psymodel.c(1885): (col. 2) remark: LOOP WAS VECTORIZED.
   psymodel.c(1890): (col. 2) remark: LOOP WAS VECTORIZED.
   psymodel.c(1895): (col. 6) remark: PARTIAL LOOP WAS VECTORIZED.

这些remark信息显示某些源文件(psymodel.c)中的某行代码(1846,1771...)上的循环结构被编译器成功的进行了向量化,也就是编译器对这些循环生成了SSE指令。SSE指令可以在单条指令中执行以前多次循环操作才能完成的功能,从而加快了程序执行速度。

3。这里给出的步骤适合于很多使用标准configure脚本进行配置,然后用make进行编译的开源程序。有兴趣的话你也可以把你感兴趣的程序拿来用icc优化一把,说不定有意想不到的收获呢。

用ICC编译MP3编码器LAME相关推荐

  1. linux内核编译静态库,用icc编译Linux内核完美教程[图文]

    本文将介绍用icc(Intel? C++ Compiler)版本 10.1.x 来编译Linux的内核(支持2.6.22以上的版本) 2.6.23以上包含2.6.23的内核它的解压和引导内核代码改变了 ...

  2. 将音频转化为MP3格式(lame库)

    为什么要转化音频格式 最近又在做即时通讯了, 关于语音录制的文件总是那么几个类型的, 但想要与 Android 实现音频互通. 那么就要转化Mp3格式的音频文件或者Amr 格式文件. 当然Amr是最好 ...

  3. vlc录制网络流_基于PortAudio+LAME3实现的ASIO多通道音频录制mp3

    今天给大家分享一个之前做的ASIO多通道音频录音机程序,可以实时对多达64通道的ASIO音频进行录制MP3或WAV. 好了,话不多说,先给大家看东西. 整个录音软件采用Qt编写,使用了开源库PortA ...

  4. 基于PortAudio+LAME3实现的ASIO多通道音频录制(mp3、WAV )

    文章目录 ASIO 场景 解决方案 Dante Virtual Sound PortAudio LAME3 录音软件 今天给大家分享一个之前做的ASIO多通道音频录音机程序,可以实时对多达64通道的A ...

  5. 全球著名音乐抓轨软件EAC 设置详解

    EAC的作者Andre Wiethoff是德国多特蒙德大学计算机专业的一名学生,经常抓取和监听各种WAV文件,所以使用了许多抓音轨的软件,但令他不满意的是,这些软件只有 时基误差的校正,而CDROM在 ...

  6. 让你见识真正的数字音频技术

    第一章 APE音频技术 Monkeys Audio 编码APE介绍 Monkeys Audio 编码APE APE是目前流行的一种数字音乐文件格式,与MP3这类有损压缩方式不同,APE是一种无损压缩技 ...

  7. iOS 使用lame录音文件wav转mp3

    LAME 是最好的MP3编码器,编码高品质MP3的最好也是唯一的选择.要编译lame 静态库,可以按一下步骤完成: 1.到点击打开链接 下载最新的lame mp3 encoder, 2.到github ...

  8. android mp3 编码,Android 如何采用Lame编码器编码mp3文件

    这篇文章会基于下面3个问题来展开讲解. 1.什么是Lame? 2.为什么采用Lame? 3.Lame在Android应用上如何使用? 一.什么是Lame LAME is a high quality ...

  9. linux编译lame,技术|Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or dir...

    提问: 我尝试着在Linux中编译视频编码器,但是编译提示出错:"fatal error: lame/lame.h: No such file or directory", 我该如 ...

  10. 使用Lame库实现wav、pcm转mp3

    文章目录 前言 一.Lame库是什么? 二.使用步骤 0.创建native项目 1.下载Lame库 2.pcm转MP3 3.wav转MP3 4.native方法如下 三.注意 总结 前言 因为使用an ...

最新文章

  1. centos6.3下搭建LAMP环境
  2. 数据库主键设计之思考(转)
  3. React Native ScrollableTabView的自定义tabBar
  4. 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现
  5. IT互联网公司的笔试的输入输出- c++ python
  6. python 核心编程_【02】Python核心编程 (全)
  7. Golang slice高级应用
  8. mysql systemctl开机启动_Linux 开机启动项命令:chkconfig 和 systemctl
  9. 基于遗传算法(deap库)的一元函数寻优代码详解
  10. 互亿无线短信接口开发
  11. Android 设置屏幕亮度
  12. 连接服务器打印机文件名无效,局域网打印机连接时显示打印机名无效是何原因? 求教数码高手!...
  13. go语言for循环break、continue高级用法
  14. centos修改键盘布局
  15. CDA学习之Pandas - 十分钟搞定Pandas / Pandas秘籍
  16. bcd 初始化库系统卷失败_中级|软考题库每日一练|2.24
  17. 生信技能树linux虚拟机,科学网—Windows10安装Linux子系统Ubuntu 20.04LTS,轻松使用生信软件,效率秒杀虚拟机 - 刘永鑫的博文...
  18. 5.雅思口语——别再用delicious food啦
  19. Day357358359360.JVM监控及诊断工具-GUI -JVM
  20. SQL中存储过程和函数的标准写法

热门文章

  1. Android UI布局优化之ViewStub
  2. BZOJ2160 拉拉队排练
  3. 异步操作之后让await后续的代码能够继续执行
  4. 远程文件传输工具Filezilla
  5. python if else break_Python条件判断 if-else for循环 while循环 break continue
  6. 操作系统的不确定性是指_读文||不确定性原理—人工智能的哲学基础
  7. ubuntu 最新提权漏洞_Ubuntu和Debian最新的KDE安全漏洞,附-修复指南
  8. bom sap 替代项目_简述SAP系统常规模块能为定制家居企业解决哪些核心问题
  9. java中复制图片_2017.5.3 java中 复制图片的4种方式(copy图片只能用字节流对象)...
  10. data layui table 排序_具有排序、筛选、分组、虚拟化、编辑功能的React表格组件...