`
izuoyan
  • 浏览: 9123388 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用ICC编译MP3编码器LAME

阅读更多

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优化一把,说不定有意想不到的收获呢。

分享到:
评论

相关推荐

    iccavr软件编译时错误提示

    在使用iccavr进行编程的过程中,新手经常会遇到一些常见的编译错误。本文将根据给定的内容来分析这些错误,并提供相应的解决方法。下面我们将逐一解析并给出可能的原因与解决方案。 #### 二、错误报告解析 ##### 1...

    ICCAVR编译环境

    ICCAVR编译环境是专为avr单片机学习者设计的一个综合开发工具,它集成了编译、调试和烧录等一系列必要的功能,方便初学者和专业人士进行avr微控制器的程序开发。avr单片机是Atmel公司(现已被Microchip Technology...

    基于M16(ICC编译)的红外探头循迹小车

    【基于M16(ICC编译)的红外探头循迹小车】是一个入门级的电子制作项目,它结合了硬件电路设计与编程技术,旨在让小车能够自动沿着黑色线条行驶。在这个项目中,主要涉及以下几个核心知识点: 1. **M16微控制器**:...

    ICCAVR编译DS18B20 c语言程序

    在本文中,我们将深入探讨如何使用ICCAVR编译器来编译针对AVR微控制器的C语言程序,特别是与DS18B20温度传感器交互的代码。DS18B20是一款单线数字温度传感器,广泛应用于各种嵌入式系统中,如智能家居、环境监测和...

    iccavr编译时出现的错误解决办法借鉴.pdf

    ### ICCAVR 编译时常见错误及解决办法 #### 一、正常编译通过 在正常的编译过程中,我们期望看到如下输出: ```plaintext C:\icc\bin\imakew -f main.mak iccavr -c -IC:\icc\include\ -e -DATMEGA -DA桌面 实验...

    ICCAVR V7编译软件

    ICCAVR V7编译软件

    icc7编辑器配置 icc7 编辑器配置

    icc7 编辑器配置 icc7 编辑器配置 icc7 编辑器配置icc7 编辑器配置

    ICC系列信号隔离器

    【ICC系列信号隔离器】是MTL Instruments China Co. Ltd生产的一款重要的工业自动化设备,主要用于在控制系统中实现信号的隔离和传输。这个系列包括多个型号,如ICC211、ICC212、ICC221和ICC222,分别针对不同的应用...

    iccavr7.22破解版+iccavr7.22使用图解

    iccavr7.22破解版+iccavr7.22使用图解 iccavr7.22破解版+iccavr7.22使用图解 iccavr7.22破解版+iccavr7.22使用图解 iccavr7.22破解版+iccavr7.22使用图解 iccavr7.22破解版+iccavr7.22使用图解 iccavr7.22破解版+icc...

    AVR的一些资料,编译环境为ICC

    标题中的“AVR的一些资料,编译环境为ICC”指的是使用了IAR Embedded Workbench for AVR,简称ICC AVR,这是一个针对AVR微控制器的集成开发环境(IDE)。IAR Systems公司提供的ICC AVR是一款高级C/C++编译器,它为...

    MySQL v5.1.33 For Linux-i686-icc-2.3(IA64)

    MySQL 5.1.33 版本在性能上进行了优化,特别是在 IA64 平台上使用 Intel C/C++ 编译器编译后,能够充分利用处理器特性,提供更快的查询速度和更低的资源消耗。 4. **易于使用**: MySQL 以其简单的安装过程和直观...

    ICC AVR V7C编译软件

    ICC AVR V7C编译软件 破解版

    4*4独立按键 数码管显示 iccavr编译 Mega16 c语言程序

    《4*4独立按键与数码管显示:ICC AVR编译Mega16 C语言程序详解》 在嵌入式系统开发中,与用户交互是必不可少的一环,这通常涉及到按键和显示设备的使用。本篇将详细介绍如何使用4*4独立按键阵列以及数码管显示技术...

    iccavr编译putchar未定义时解决方案.pdf

    在使用ICC AVR编译器进行嵌入式系统开发的过程中,可能会遇到编译时提示`undefined symbol '_putchar'`的错误。这个问题通常出现在尝试在程序中使用`putchar()`函数但编译器未能识别该函数的情况。例如,在提供的源...

    ICC 使用手册及常见错误集

    ICC编译错误集通常包含了在使用过程中可能遇到的各种错误消息及其解释,帮助开发者快速定位和解决问题。常见的错误类型包括: 1. **语法错误**:如未闭合的括号、非法的运算符组合、未声明的变量等。 2. **类型...

    iccavr编译putchar未定义时解决方案实用.pdf

    我在用 iccavr 编译程序 “hello.c” 的时候,出现以下错误: !ERROR file 'hello.o': undefined symbol '_putchar' E:\INSTAL~1\ICCAVR~1\bin\imakew.exe: Error code 1 Done: there are error(s). Exit code: 1. ...

    AVR单片机实现的窗户红外光报警器程序,ICC6.3编译

    它提供了一套完整的集成开发环境(IDE),包括源代码编辑器、编译器、链接器、调试器等,使得开发者能够方便地编写、编译、调试AVR单片机上的应用程序。 在提供的压缩包文件中,我们可以看到以下几个关键文件: 1....

    iccavr6.31a软件

    此外,它还支持仿真器和JTAG接口,可与多种AVR调试硬件配合使用,实现对真实硬件的在线调试。 **三、项目管理** 该软件提供了一个直观的项目管理界面,用户可以轻松创建、管理和组织多个工程。它支持源码版本控制...

Global site tag (gtag.js) - Google Analytics