> 文档中心 > FluidSynth 在 Windows 64 位系统的编译

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.* 格式,否则需要解压两次。

fluidsynth

instpatch

将这两个软件包分别解压,我都解压在了 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 程序:

CMake 界面
cmake

如上图所示,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。

是否创建文件夹?直接点 Yes
是否创建文件夹?直接点 Yes

此时会询问你需要生成什么样的Generator(我们将 Makefiles 或 IDE 的工程文件称为 Generators)。我们需要将它设置为 Ninja,且编译器要自己指定。如下图所示:

设置Generator与编译器

 填写 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.7E:/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

若出现上图中的信息,即为编译成功,可以开始使用了