Windows编译开源代码方法之关于lame.exe文件的测试及过程

这篇具有很好参考价值的文章主要介绍了Windows编译开源代码方法之关于lame.exe文件的测试及过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最终结果(PS:使用markdown不熟悉,记得在井号后面加个空格才能触发)


PS C:\Users\zjc20\source> cd .\lame-3.100\
PS C:\Users\zjc20\source\lame-3.100> nmake.exe .\Makefile.MSVC

Microsoft (R) Program Maintenance Utility Version 14.34.31937.0
Copyright (C) Microsoft Corporation.  All rights reserved.

----------------------------------------------------------------------
building LAME featuring RH
+ ASM
+ MMX
using MS COMPILER
+ optimizing for Pentium II/III
+ using Single precision
----------------------------------------------------------------------
Pass GTK=YES to build the frame analyzer. (requires installed GTK)

libmp3lame\i386\cpu_feat.nas
'nasmw' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'nasmw' : return code '0x1'
Stop.
PS C:\Users\zjc20\source\lame-3.100> copy .\configMS.h config.h
PS C:\Users\zjc20\source\lame-3.100> nmake -f .\Makefile.MSVC comp=msvc asm=no

Microsoft (R) Program Maintenance Utility Version 14.34.31937.0
Copyright (C) Microsoft Corporation.  All rights reserved.

----------------------------------------------------------------------
building LAME featuring RH
using MS COMPILER
+ optimizing for Pentium II/III
+ using Single precision
----------------------------------------------------------------------
Pass GTK=YES to build the frame analyzer. (requires installed GTK)
Pass ASM=YES to build the assembler optimizations

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

--- LAME MP3 ENCODING LIBRARY UPTODATE ---

common.c
dct64_i386.c
decode_i386.c
layer1.c
layer2.c
layer3.c
tabinit.c
interface.c

--- HIP DECODING LIBRARY UPTODATE ---


--=* .\output\libmp3lame-static.lib ready *=--

main.c
get_audio.c
parse.c
timestatus.c
lametime.c
console.c
brhist.c

--- COMMON FRONTEND STUFF UPTODATE ---

lame_main.c
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.


--=* .\output\lame.exe ready *=--


--=* lame.exe uptodate *=--

PS C:\Users\zjc20\source\lame-3.100>

可以看到成功编译了源代码为exe也就是可执行文件
在这个例子中,lame的源文件中的INSTALL文件中的说明很全。所以配置好环境之后就可以编译了。主要是学到了不少东西。
之前我一直是在Linux上操作的,Linux对源码的支持度比较好,我也查了原因后面我会放链接。而到了window系统之后就比较的头疼。
原因有
一是:我在window上使用的比较多的是解释型语言:python,而且语言比较单一所以只要配置好python环境就好。可是像实现比较大的项目的源码使用,如果单独使用python的就直接照着readme的使用方法干就好了。有融合的,只要环境配置的对也还是没多大的问题,因为一般都是只需要在Linux上干就行了,但是到了这种要输出为一个Windows可执行文件的我还没尝试过,之前搞C++和C时使用的还是devC++这种直接编写然后来个编译并运行就行了。
二是对window的系统并不了解。Windows系统比较复杂,对我这样的小白是这样的。所以在Linux中编写,编译,运行都比较简单。像make,cofigure,就比较简单。现在看看Linux与window的区别:

与Linux系列操作系统不同,Windows原生环境不提供类似gcc,Clang的C/C++语言源程序编译运行工具链。运行在Windows上的IDE(集成开发环境),比如CodeBlocks之类,一般都使用MinGW(Minimalist GNU for Windows)配置模拟Linux下的开发环境来进行Windows下的开发。
但是在Windows下,与开发环境以及code编辑器协同更好的还是MSVC(Microsoft Visual C/C++)编译器。对于灵活程度更高的code编辑器,我们可以将Microsoft的Visual C/C++编译器下载并集成到code中。
其三:我习惯性使用VScode,而VScode只是一个类似于记事本一样的东西,并没有什么实际功能,所以只能不断地配置。也就是说我更习惯在命令行去干活。“月才越爱玩”,像gcc,一些比较简单的编译还是会的,一旦到了makefile,或是,点sh文件就没有试过了,虽然对这些文件的理解是:他们就像脚本和命令行一样,是自动化的一种形式。但是实在是搞不明白,总感觉这种跟计算机底层的相关性很强。而且这个项目的config和makefile东西是真的多:要不是看INSTALL文件,真的不知道什么意思。


C:.
│   acinclude.m4
│   aclocal.m4
│   API
│   ChangeLog
│   compile
│   config.guess
│   config.h.in
│   config.log
│   config.rpath
│   config.sub
│   configMS.h
│   configure
│   configure.in
│   COPYING
│   DEFINES
│   depcomp
│   HACKING
│   INSTALL
│   install-sh
│   INSTALL.configure
│   lame.bat
│   lame.spec
│   lame.spec.in
│   LICENSE
│   ltmain.sh
│   Makefile.am
│   Makefile.am.global
│   Makefile.in
│   Makefile.MSVC
│   Makefile.unix
│   missing
│   README
│   README.WINGTK
│   STYLEGUIDE
│   testcase.mp3
│   testcase.wav
│   TODO
│   USAGE
│
├───.vs
│   │   slnx.sqlite
│   │   VSWorkspaceState.json
│   │
│   └───lame-3.100
│       ├───FileContentIndex
│       │   │   b4658905-267a-40dc-a6ab-7ec6f8b836c3.vsidx
│       │   │   read.lock
│       │   │
│       │   └───merges
│       └───v17
├───ACM
│   │   ACM.cpp
│   │   ACM.h
│   │   acm.rc
│   │   ACMStream.cpp
│   │   ACMStream.h
│   │   adebug.h
│   │   AEncodeProperties.cpp
│   │   AEncodeProperties.h
│   │   DecodeStream.cpp
│   │   DecodeStream.h
│   │   lame.ico
│   │   lameACM.def
│   │   LameACM.inf
│   │   lame_acm.xml
│   │   main.cpp
│   │   Makefile.am
│   │   Makefile.in
│   │   readme.txt
│   │   resource.h
│   │   TODO
│   │
│   ├───ADbg
│   │       ADbg.cpp
│   │       ADbg.h
│   │       Makefile.am
│   │       Makefile.in
│   │
│   ├───ddk
│   │       Makefile.am
│   │       Makefile.in
│   │       msacmdrv.h
│   │
│   └───tinyxml
│           changes.txt
│           dox
│           makedistlinux
│           makedistwin.bat
│           Makefile.am
│           Makefile.in
│           Makefile.tinyxml
│           readme.txt
│           tinyxml.cpp
│           tinyxml.h
│           tinyxmlerror.cpp
│           tinyxmlparser.cpp
│           xmltest.cpp
│
├───debian
│   │   .cvsignore
│   │   changelog
│   │   compat
│   │   control
│   │   copyright
│   │   lame.doc-base
│   │   lame.docs
│   │   lame.install
│   │   lame.manpages
│   │   libmp3lame-dev.install
│   │   libmp3lame0.install
│   │   Makefile.am
│   │   Makefile.in
│   │   rules
│   │   watch
│   │
│   ├───CVS
│   │       Entries
│   │       Repository
│   │       Root
│   │
│   └───source
│       │   format
│       │
│       └───CVS
│               Entries
│               Repository
│               Root
│
├───Dll
│       BladeMP3EncDLL.c
│       BladeMP3EncDLL.def
│       BladeMP3EncDLL.h
│       Example.cpp
│       LameDLLInterface.htm
│       Makefile.am
│       Makefile.in
│       Makefile.mingw32
│       MP3export.pas
│       README
│
├───doc
│   │   Makefile.am
│   │   Makefile.in
│   │
│   ├───html
│   │       about.html
│   │       abr.html
│   │       cbr.html
│   │       contact.html
│   │       contributors.html
│   │       detailed.html
│   │       history.html
│   │       index.html
│   │       introduction.html
│   │       links.html
│   │       list.html
│   │       Makefile.am
│   │       Makefile.in
│   │       ms_stereo.html
│   │       usage.html
│   │       vbr.html
│   │
│   └───man
│           lame.1
│           Makefile.am
│           Makefile.in
│
├───dshow
│       aboutprp.cpp
│       aboutprp.h
│       elogo.ico
│       Encoder.cpp
│       Encoder.h
│       iaudioprops.h
│       Makefile.am
│       Makefile.in
│       Mpegac.cpp
│       Mpegac.def
│       Mpegac.h
│       Property.rc
│       PropPage.cpp
│       PropPage.h
│       PropPage_adv.cpp
│       PropPage_adv.h
│       README
│       REG.CPP
│       REG.H
│       resource.h
│       UIDS.H
│
├───frontend
│       amiga_mpega.c
│       brhist.c
│       brhist.h
│       console.c
│       console.h
│       depcomp
│       get_audio.c
│       get_audio.h
│       gpkplotting.c
│       gpkplotting.h
│       gtkanal.c
│       gtkanal.h
│       lametime.c
│       lametime.h
│       lame_main.c
│       main.c
│       main.h
│       Makefile.am
│       Makefile.in
│       mp3rtp.c
│       mp3x.c
│       parse.c
│       parse.h
│       rtp.c
│       rtp.h
│       timestatus.c
│       timestatus.h
│
├───include
│       lame.def
│       lame.h
│       libmp3lame.sym
│       Makefile.am
│       Makefile.in
│
├───libmp3lame
│   │   bitstream.c
│   │   bitstream.h
│   │   depcomp
│   │   encoder.c
│   │   encoder.h
│   │   fft.c
│   │   fft.h
│   │   gain_analysis.c
│   │   gain_analysis.h
│   │   id3tag.c
│   │   id3tag.h
│   │   l3side.h
│   │   lame-analysis.h
│   │   lame.c
│   │   lame.rc
│   │   lameerror.h
│   │   lame_global_flags.h
│   │   logoe.ico
│   │   machine.h
│   │   Makefile.am
│   │   Makefile.in
│   │   mpglib_interface.c
│   │   newmdct.c
│   │   newmdct.h
│   │   presets.c
│   │   psymodel.c
│   │   psymodel.h
│   │   quantize.c
│   │   quantize.h
│   │   quantize_pvt.c
│   │   quantize_pvt.h
│   │   reservoir.c
│   │   reservoir.h
│   │   set_get.c
│   │   set_get.h
│   │   tables.c
│   │   tables.h
│   │   takehiro.c
│   │   util.c
│   │   util.h
│   │   vbrquantize.c
│   │   vbrquantize.h
│   │   VbrTag.c
│   │   VbrTag.h
│   │   version.c
│   │   version.h
│   │
│   ├───i386
│   │       choose_table.nas
│   │       cpu_feat.nas
│   │       fft.nas
│   │       fft3dn.nas
│   │       fftfpu.nas
│   │       fftsse.nas
│   │       ffttbl.nas
│   │       Makefile.am
│   │       Makefile.in
│   │       nasm.h
│   │       scalar.nas
│   │
│   └───vector
│           lame_intrin.h
│           Makefile.am
│           Makefile.in
│           xmm_quantize_sub.c
│
├───mac
│       .DS_Store
│       LAME.mcp
│       LAME_Carbon_Debug.pch
│       LAME_Carbon_Final.pch
│       LAME_Classic_Debug.pch
│       LAME_Classic_Final.pch
│       MacDLLMain.c
│       Makefile.am
│       Makefile.in
│       Precompile_Common.h
│
├───macosx
│   │   Info.plist
│   │   LAME_Prefix.pch
│   │   Makefile.am
│   │   Makefile.in
│   │
│   ├───English.lproj
│   │       InfoPlist.strings
│   │       Makefile.am
│   │       Makefile.in
│   │
│   └───LAME.xcodeproj
│           Makefile.am
│           Makefile.in
│           project.pbxproj
│
├───misc
│       abx.c
│       ath.c
│       auenc
│       depcomp
│       Lame.vbs
│       lame4dos.bat
│       lameGUI.html
│       lameid3.pl
│       Makefile.am
│       Makefile.in
│       mk_mp3.sh
│       mlame
│       mlame_corr.c
│       mugeco.sh
│       scalartest.c
│
├───mpglib
│       AUTHORS
│       common.c
│       common.h
│       dct64_i386.c
│       dct64_i386.h
│       decode_i386.c
│       decode_i386.h
│       depcomp
│       huffman.h
│       interface.c
│       interface.h
│       l2tables.h
│       layer1.c
│       layer1.h
│       layer2.c
│       layer2.h
│       layer3.c
│       layer3.h
│       Makefile.am
│       Makefile.in
│       mpg123.h
│       mpglib.h
│       README
│       tabinit.c
│       tabinit.h
│
└───vc_solution
        arch_nasm.vsprops
        arch_sse2.vsprops
        arch_x87.vsprops
        Makefile.am
        Makefile.in
        vc9_lame.sln
        vc9_lame_acm.vcproj
        vc9_lame_acm_adbg.vcproj
        vc9_lame_acm_tinyxml.vcproj
        vc9_lame_clients.sln
        vc9_lame_config.vsprops
        vc9_lame_dll.vcproj
        vc9_lame_dll_example.vcproj
        vc9_lame_dshow.vcproj
        vc9_lame_lame.vcproj
        vc9_lame_mp3rtp.vcproj
        vc9_lame_mp3x.vcproj
        vc9_lame_test.vcproj
        vc9_libmp3lame.vcproj
        vc9_libmp3lame_dll.vcproj
        vc9_mpglib.vcproj
        vc9_nasm.rules

=======================================================================
Building the software on *NIX platforms using configure:
=======================================================================
Run the following commands:

% ./configure
% make
% make install

For a complete list of options, try "./configure --help"
Some of the more usefull options:
=======================================================================
Building the software on Windows with MSVC:
(or MSVC + 3rd party C compiler such as ICL)
=======================================================================
There are MSVC project files, and a Makefile.MSVC included with the 
project.  For production use, be sure to compile a "Release" target, 
with the "maximum speed" compile option, and #define NDEBUG.   

It is possible to compile the GTK frame analyzer under windows, see
README.WINGTK

Various build options can be set in configMS.h

Note: project files for building lame.exe seem to be broken or not
quite compatable with MSVC6.  The most reliable way to build lame and
lame_enc.dll is to run the .bat script (comes with MSVC6) which sets
up your VC environment to work from the command line, and then:

copy configMS.h config.h 
nmake -f Makefile.MSVC  comp=msvc  asm=no

Project files for the dll, ACM codec and directshow filter 
seem to be in better sahpe.  

起因:foobar2000在格式转换中需要lame.exe。然而我只能找到源代码。人家是这么说的:

LAME is an educational tool to be used for learning about MP3 encoding. 

The goal of the LAME project is to improve the psycho acoustics, quality and speed of MP3 encoding. 

Note: we provide source code only!

Features
Source code only !!!

没办法了就这样吧。

想法:一:在Linux上试试编译可执行文件exe

linux上对环境的要求好像没有这么绕人。

这种办法叫做交叉编译, 要用到交叉编译器

方法没试

想法二:使用项目管理工具(也可以是IDE)来编译运行。

类比Linux原理

在 Angband 目录中,首先,运行随源码一起提供的配置脚本

$ ./configure

这一步将扫描你的系统,找到 Angband 正确构建所需的依赖性。有些依赖是非常基本的,没有它们你的电脑就无法运行,而有些则是专门的。在这一过程结束时,该脚本会给你一份关于它所发现的东西的报告。

一旦一切配置完毕,运行make命令:
$ make
这通常需要一段时间,但它提供了很多视觉反馈,所以你会知道代码正在被编译。

最后一步是安装你刚刚编译的代码。安装代码并没有什么神奇之处。所做的就是复制很多文件到非常具体的目录中。无论你是从源代码编译还是运行花哨的图形安装向导,都是如此。由于这些代码会被复制到系统级目录,你必须有 root(管理)权限,这是由 sudo命令授予的。
$ sudo make install
1
也就是说:原理就是这么些。开始看看有什么不同。
还好这个说明文档很清楚:
如何获取MSVC:
 一般来说,获取MSVC要通过Microsoft Visual Studio来实现。对于一般的应用场景来说,我们不需要下载完整的IDE而是只需要下载单个组件下的MSVC C++ 生成工具,以及Windows 10 SDK即可。(MSVC C++生成工具包含了全部编译链接工具链以及大部分函数库与头文件;Windows 10 SDK只是提供其它的一些必要库文件与头文件
Windows编译开源代码方法之关于lame.exe文件的测试及过程
要按照INSTALL来:Building the software on *NIX platforms using configure
接着。运行即可。

想法三:使用Cygwin。(这个有好多类似的。就是模仿Linux不在赘述)

想法四:使用wsl,与Linux异曲同工。依旧需要交叉编译。

在INSTALL后面还有许多说明。Building the software on Windows with free compilers.比较类似。就不说了。

总结就是严格按照说明文档。理解Linux与Windows的不同。而且知道编译的共通之处。

在写的过程中实验了很多Markdown的格式。也算是有所收获。

我还想知道例如python代码编译为可执行文件。这个好像要使用pyinstaller,有篇文章有说明。

就这样吧。累了。

one more thing

没有代码的纵向进度条是真的烦。厌倦了。


  1. https://linux.cn/article-14033-1.html#:~:text=%E5%85%B7%E4%BD%93%E6%9D%A5%E8%AF%B4%EF%BC%8C%E4%BD%A0%E9%9C%80%E8%A6%81%E4%B8%80%E4%B8%AA%E7%BC%96%E8%AF%91%E5%99%A8%E3%80%82%20%E7%BC%96%E8%AF%91%E5%99%A8%EF%BC%88%E6%AF%94%E5%A6%82%20GCC%20%E6%88%96%20LLVM%EF%BC%89%E5%8F%AF%E4%BB%A5%E5%B0%86%E5%83%8F%E8%BF%99%E6%A0%B7%E7%9A%84%E6%BA%90%E4%BB%A3%E7%A0%81%EF%BC%9A%20%23include%20%3Ciostream%3E%20using,%22hello%20world%22%3B%20%7D%20%E5%8F%98%E6%88%90%20%E6%9C%BA%E5%99%A8%E8%AF%AD%E8%A8%80%20%EF%BC%8C%E5%8D%B3%20CPU%20%E7%94%A8%E6%9D%A5%E5%A4%84%E7%90%86%E4%BF%A1%E6%81%AF%E7%9A%84%E6%8C%87%E4%BB%A4%E3%80%82 ↩︎文章来源地址https://www.toymoban.com/news/detail-500990.html

到了这里,关于Windows编译开源代码方法之关于lame.exe文件的测试及过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)

    本文章已授权微信公众号郭霖(guolin_blog)转载。 本文主要讲解的是 音频基础概念 、 交叉编译原理和实践(LAME的交叉编译) ,是基于 Android平台 ,示例代码如下所示: AndroidAudioDemo 另外, iOS平台 也有相关的文章,如下所示: 音视频开发之旅——音频基础概念、交叉编译

    2024年04月25日
    浏览(85)
  • Python反编译exe获取封装源代码

    先把exe和pyinstxtractor放在一起 会得到一个文件夹 安装解析库 一共有两个,还有个struct 用sublime打开两个文件,看到一堆二进制,其中struct是多一行的,把struct的第一行复制到前一个文件中 uncompyle6 C:UserslenovoDesktop20223102412-李凌飞exemerge_ALL_ALL_V1.0.exe_extractedmerge_ALL_ALL_V1.0

    2024年01月19日
    浏览(57)
  • 关于C/C++语言重复包含头文件,编译时报错已定义的宏未定义的原因及解决方法

    在编写一个文件较多的单片机程序时,为了在一个文件中定义的变量或宏能被另一个文件使用,经常会写成在多个头文件相互包含,由此将可能会导致明明已经定义的宏,且已经将宏所在的文件使用 #include  包含,编译时仍会报错未定义。 先来看一段简单的代码 main.c main.h

    2024年02月04日
    浏览(37)
  • 链接文件学习(七):英飞凌MCU Tasking编译器LSL链接文件解析 及代码变量定位方法

    目录   1、Tasking的链接文件 1.1、DSRAM中的数据存放 1.2、PFlash中的代码存放 1.3、LMU 1.4、PSRAM 1.5、UCB 2、代码与变量定位

    2024年02月07日
    浏览(57)
  • 反编译调试C#编写的exe软件和dll方法详解

    1.首先需要下载软件dnSpy.exe,下载地址: https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 2.使用方法: 首先打开项目,我们这里可以选择dll,也可以选择exe 这边我们是打开了一个WPF写的客户端软件。 2.打开后我们去定位他的功能,根据分析这个软件代码主要在dll中,如下所示: 3.在

    2024年02月20日
    浏览(40)
  • 关于修改注册表后Excel.exe、POWERPNT.exe或WINWORD.exe找不到指定路径问题的临时解决方法

    问题描述: 本人在重置此电脑之后,修改了注册表的默认的软件安装路径之后(下图) 再点击Win10开始菜单中的Excel、PowerPoint和Word的快捷方时没有反应。  于是: 右键点击该快捷方式更多打开文件位置      找到该快捷方式所在位置之后,双击Excel快捷方式,不出意外的话这

    2024年02月07日
    浏览(91)
  • C++开发实战(二):打开已有工程,并编译生成dll、exe等文件

    1、如下几张图,提示很友好,但我都点击了确定,并进行了运行,提示: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何。。。 2、根据提示安装依赖库 (1)搜索栏搜索应用Visual Studio Installer (2)双击打开,选择单个组件安装,选择 MFC 库(

    2024年02月06日
    浏览(97)
  • Windows下查看exe文件的动态链接

    GitHub - lucasg/Dependencies: A rewrite of the old legacy software \\\"depends.exe\\\" in C# for Windows devs to troubleshoot dll load dependencies issues. A rewrite of the old legacy software \\\"depends.exe\\\" in C# for Windows devs to troubleshoot dll load dependencies issues. - GitHub - lucasg/Dependencies: A rewrite of the old legacy software \\\"depends.exe\\\" in C# f

    2024年02月06日
    浏览(40)
  • 关于 Qt在windows使用mingw32编译器时从Qt5.9切换至Qt5.12出现“C2001:常量中有换行符“不修改编码 的解决方法

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131901444 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)   研发项目先

    2024年02月15日
    浏览(58)
  • Windows中bat文件启动jar、exe、cmd等文件

    随着组件的增多、每次启动都要找到位置写一遍命令十分的费劲、麻烦。   bat文件的框架编写  bat文件在那个文件夹下 默认读取的就是本文件夹下的文件 (1)jar包启动 命令: 解析: 第一个zipkin为小黑框的名称 第二个是启动jar包的命令  (2)exe文件启动 比如redis  命令:

    2024年02月15日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包