我无法找到为 Windows 构建 librevenge 静态库的工作解决方案。
对于更广泛的上下文,我需要构建 librevenge 静态库,因为这是 libcdr 库的依赖项。我需要 libcdr 才能在 64 位 Windows(发行版)上工作,因此我需要为 x64/release 构建 librevenge。
作为参考,这是我从 GitHub 克隆的 librevenge 项目:https://github.com/Distrotech/librevenge
librevenge 项目使用 GNU Make 来处理构建过程,通过实验我发现我无法在 Windows Git Bash 终端中运行 autogen.sh 和配置脚本,因为存在许多错误,从语法问题到多个丢失的包。我可以确认这些脚本在 WSL 和 MacOS 上正确运行,几乎没有问题,经过几次 google 搜索后就可以直接解决。当然,这是可以预料的,因为 Windows 不是 UNIX 系列的一部分,而 GNU Make 是为了在基于 UNIX 的系统上工作而设计的。
使用 Visual Studio
根据 librevenge 自述文件,build/win32/ 中有工作区,可以在其中从提供的 Visual Studio 解决方案文件构建静态库。在 build/win32 内部,我在 VS2022 中打开了 librevenge.vcxproj.sln,并将解决方案配置更改为输出 release/x64。
奇怪的是,librevenge 项目中引用了许多源文件,但其中实际上并不存在于存储库中的任何位置。正如预期的那样,该项目因此无法建设。
我尝试查看 librevenge 存储库中的不同标签,例如 librevenge-0.0.4、librevenge-0.0.0 等,并在尝试构建 VS 项目时遇到相同的错误。
我的假设是 Visual Studio 解决方案尚未更新以匹配新版本的 librevenge 中使用的源文件。如果是这种情况,是否有一种解决方法可以用来查找成功编译 librevenge 项目所需的源文件?
在 WSL 中使用 GNU Make
另一种方法是使用 WSL 在我的 Windows 计算机上模拟 Linux 发行版。使用 g++ 编译器,我成功编译了 .so 文件形式的 librevenge 库。
我尝试过使用能够交叉编译的x86_64-w64-mingw32-g++。
命令:
./autogen.sh
安装正确的软件包后就没有问题了。
./configure --build=x86_64-linux-gnu --host=x86_64-w64-mingw32 CC=x86_64-w64-mingw32-g++ --disable-werror
花了一些时间来弄清楚交叉编译需要哪些参数,但我相信这越来越接近我所需要的。所以 --build 指定了我正在构建的当前环境,而 --host 是我正在构建的 64 位 Windows。我需要 --disable-werror 以便编译器忽略停止编译的“不必要的注释”。
make
这里我遇到了一个问题,即使 zlib.h 已经安装在 usr/include 和 usr/x86_64-w64-mingw32-g++/include 中,也无法找到 zlib.h。
我可能会继续沿着这种方式进行交叉编译,但我更愿意使用 Visual Studio 在 Windows 中本地构建该库。
总结
展望未来,请给我一些关于在 Visual Studio 或 WSL 中构建 librevenge 的指导。正如我之前所说,我宁愿在 Visual Studio 上构建 librevenge,因为这将使将来的 Windows 构建变得简单。
我发现在 Windows 上构建 librevenge 最简单的方法是使用存储库中提供的 Visual Studio 项目并修复错误(删除丢失的文件)。
构建 librevenge 的步骤:
我希望这对某人有帮助!