FluidSynth 在 Windows 64 位系统的编译
目录
准备工作
下载 FluidSynth 和 libinstpatch 的源码
安装 CMake
安装 MSYS2
使用清华大学的软件包镜像源
在 MSYS2 中安装各种软件包依赖
处理 libinstpatch 并编译
在 CMake 中配置 instpatch
使用 Ninja 编译并安装
用 CMake 处理 FluidSynth 并编译
开始编译
FluidSynth 是一个开源的 SoundFont2 软件合成器,本文讲述了它的源代码在 Windows x64 环境下的编译过程。
准备工作
下载 FluidSynth 和 libinstpatch 的源码
截至本文编写日期(2022年5月15日),FluidSynth 软件的版本为 2.2.7,libinstpatch 的版本为 1.1.6。
Releases · FluidSynth/fluidsynth · GitHub
Releases · swami/libinstpatch · GitHub
请下载 Source Code(zip)格式。不要下载 tar.* 格式,否则需要解压两次。
将这两个软件包分别解压,我都解压在了 E:\t 目录下(仅供参考)。因此,将会出现两个文件夹:E:\t\fluidsynth-2.2.7 和 E:\t\libinstpatch-1.1.6。
安装 CMake
CMake 是一个强大的软件工程预处理工具,用于生成 Makefiles 或软件项目配置文件。FluidSynth 就采用了它进行编译。
请参考:
Windows下Cmake安装步骤详解(图文)_L_Li_L的博客-CSDN博客_windows安装cmake文章目录Cmake介绍Cmake下载及安装二、使用步骤1.引入库2.读入数据总结Cmake介绍CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),并且输出对应的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Vis.https://blog.csdn.net/qq_42598221/article/details/121952160
安装 MSYS2
若要编译本软件,原则上需要使用 MinGW-w64。但是它的编译速度非常慢,占用内存非常高,编译出来的文件体积很大,因此替换成更强的 Clang。
请参考:
利用msys2安装clang和llvm编译器_狐帝的博客-CSDN博客_msys2安装clanghttps://blog.csdn.net/kingfox/article/details/117450533
注意,请确保把 MSYS2 安装目录下的 clang64\bin 和 usr\bin 加入 Path 环境变量。否则在之后使用 CMake 时会频繁报错。
本文的 MSYS2 安装目录位于 E:\soft\MSYS2(仅供参考)
使用清华大学的软件包镜像源
pacman 工具在国内直接使用 MSYS2 官方默认镜像的速度可能会非常不稳定,应该替换镜像源来加快速度:
msys2 | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrormsys2 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/help/msys2/
在 MSYS2 中安装各种软件包依赖
FluidSynth 所依赖的一些软件包均已包含在下面的命令行中,直接粘贴到 MSYS2 中即可。
pacman -Syyu --needed --noconfirm mingw-w64-clang-x86_64-toolchain mingw-w64-clang-x86_64-glib2 mingw-w64-clang-x86_64-libsndfile mingw-w64-clang-x86_64-ninja
安装后,MSYS2 有几率会自动关闭,这是由于 MSYS2 自我更新所导致的,不是闪退。
处理 libinstpatch 并编译
FluidSynth 依赖 InstPatch 这个软件,所以在编译 FluidSynth 之前就要编译 instpatch。
在 CMake 中配置 instpatch
打开 cmake-gui 程序:
如上图所示,Where is the source code 应该填写刚才解压出来的 instpatch 的文件夹(即 E:\t\libinstpatch-1.1.6);Where to build the binaries 是程序编译生成二进制的目标文件夹,应当与前者不同,以保证不会与原文件混淆。本文以 E:\t\libinstpatch-1.1.6\build 为例子。
勾选 Grouped 和 Advanced,使 CMake 在大列表框中显示的内容更加完整而有序。
点击一下 Configure,会弹出这个,点击 Yes。
此时会询问你需要生成什么样的Generator(我们将 Makefiles 或 IDE 的工程文件称为 Generators)。我们需要将它设置为 Ninja,且编译器要自己指定。如下图所示:
填写 C 和 C++ 编译器,如下图所示(仅供参考,与实际您的安装目录有关):
之后点击 Finish。CMake 将会扫描 instpatch 整个项目,速度较慢,请耐心等待。
扫描完毕后,大列表框内将会出现一些选项,有红的,也有白的。其中红的选项是新增的选项,应当浏览并进行修改。如下图所示:
请取消勾选:
- BUILD_SHARED_LIBS (附言:没有必要动态链接)
请填写或修改:
- CMAKE_BUILD_TYPE:Release
- CMAKE_C_FLAGS:-w -fdata-sections -ffunction-sections
- LIB_INSTALL_DIR:lib
- LIB_SUFFIX:(空白不填)
- CMAKE_INSTALL_PREFIX:(填写你的 MSYS2 下的 clang64 目录,instpatch 的所有文件将会安装到此文件夹下,如:E:/soft/msys2/clang64)
- CMAKE_EXE_LINKER_FLAGS:--static -Wl,--gc-sections -lws2_32 -lffi -lpcre -logg -lflac -liconv -lvorbis -lvorbisenc -lopus -lssp -s
再次单击 Configure 按钮,并确认没有新增红色列表项后,点击 Generate。
使用 Ninja 编译并安装
需要打开 cmd.exe,然后通过 cd 命令切换到 instpatch 的二进制目录(上文已经提到),并开始编译。编译完毕后立即安装:
cd /d e:\t\libinstpatch-1.1.6\buildninja install
若没有出现任何 errors,将会立即将 instpatch 安装到 MSYS2 中。
用 CMake 处理 FluidSynth 并编译
仿照上文编译 instpatch 的方式,填写 Where is the source code 和 Where to build the binaries 目录(下图以 E:/t/fluidsynth-2.2.7 和 E:/t/fluidsynth-2.2.7/build 为例子):
点击 Configure,仍然采用叫做 Ninja 的构建工具并指定编译器路径,如下两图所示:
CMake 将会扫描整个 FluidSynth 项目。稍等片刻将会扫描完毕。
您需要修改或填写以下项目:
- DEFAULT_SOUNDFONT:C:\\Windows\\System32\\Drivers\\GM.DLS (注意是双反斜杠)
- CMAKE_C_FLAGS:-w -fdata-sections -ffunction-sections
- CMAKE_CXX_FLAGS:-w -fdata-sections -ffunction-sections
- CMAKE_BUILD_TYPE:Release
- CMAKE_EXE_LINKER_FLAGS:--static -Wl,--gc-sections -s -limm32 -lversion -liconv -lsetupapi -Wl,--icf=safe
- CMAKE_SHARED_LINKER_FLAGS:--static -Wl,--gc-sections -s -lsetupapi -logg -lflac -lpsapi -lvorbis -lvorbisenc -lffi -lopus -limm32 -lversion -lpcre -liconv -lssp -Wl,--icf=safe
- CMAKE_INSTALL_PREFIX:(FluidSynth 程序安装的目标目录,如 E:/t/fluidsynth-2.2.7/build/install )
需要取消勾选:
- enable-pulseaudio (若保持勾选可能会崩溃)
- enable-readline (取消勾选它是因为 Readline 是 GNU 开源软件,无法封闭商用)
- enable-waveout (WaveOut 播放效果极差,且过于陈旧,濒临废弃)
再次点击 Configure,稍等片刻后,CMake 大列表框内新增有关 portaudio 的红色项目。还是再点击 Configure 来消除红色项目。最后点击 Generate。
开始编译
依然仿照上文编译 instpatch 的方法,用 cd /d 命令进入到 FluidSynth 的编译输出目录(e:\t\fluidsynth-2.2.7\build),然后还是编译并立即安装:
cd /d e:\t\fluidsynth-2.2.7\buildninja install
若一切正常,将会在最后安装时输出以下信息,表示这些文件已经陆续安装成功:
进入 .\install\bin 目录,测试 fluidsynth.exe 是否安装成功:
cd install\binfluidsynth -V
若出现上图中的信息,即为编译成功,可以开始使用了。