目前网上留下的大部分博客普遍推荐在windows下编译OpenH264时使用MinGW+MSVC的传统组合。 这样的结合使得这几年在windows下编译大量的开源项目变得简单高效,而且利用MinGW项目的跨平台能力也使得一套代码编译运行成为可能多个平台下。
不过,随着MinGW项目组停止对该项目的官方支持,借助MinGW在windows系统下编译C/C++(以下简称基于C的程序)程序正逐渐成为过去式。 根据MinGW项目组的推荐,越来越多的项目开始使用Cygwin来为windows下基于C的程序的编译提供基础支持。 OpenH264的官方文档也推荐使用Cygwin来编译。 经过笔者的实践验证,使用Cygwin编译确实简单、快速。 根据文档,直接在build目录中执行以下命令(适用于安装了nasm Word的64位系统)。
AutoBuildForWindows.bat Win64-Release-ASM
为了满足LLVM工具链用户编译项目的需求,我们在此讨论并记录使用LLVM-MinGW编译项目的后期操作和编译过程。 不用说,OpenH264项目组在Makefile中使用了大量的linux命令,比如“sh”、“rm -f xxx”等语句,这确实给windows用户造成了很多困惑。 我们将在下面逐步面对并逐步解决那些问题。
首先,要使用make编译项目,首先将make.exe程序所在文件夹的路径添加到环境变量Path中。 在“PATH TO LLVM/bin”目录中,有一个名为“mingw32-make.exe”的可执行文件,只需将此文件重命名为“make.exe”即可。 并添加“PATH_TO_LLVM/bin”、“PATH_TO_LLVM/lib”、“PATH_TO_LLVM/lib/clang/16/bin”、“PATH_TO_LLVM/lib/clang/16/lib”、“PATH_TO_LLVM/lib/clang/16/include”中环境变量,即使安装了LLVM-MinGW,严格来说也是LLVM、MinGW和clang。
把Makefile中的OS和ARCH赋值语句改成下面两句后,就可以直接开始编译了(make启动或者Clion锤子编译)。
OS = mingw_nt
ARCH = x86_64
编译的时候发现找不到sh。 解决办法就是使用git bash中内置的sh(没人没装过git,不不不)。 将“PATH_TO_GIT/bin”添加到环境变量中的Path中windows编译clang源码,这个问题就解决了。
编译时找不到rm -f。 解决办法就是直接找到报错的行,注释掉(作为鸵鸟)windows编译clang源码,问题就解决了。
编译时出现奇怪的错误,“generate_version.sh”是重灾区,可能是因为有些文件使用rn作为换行符,选择了项目中的所有文件,将其转换为n换行符。
至此编译通过,洒花! ^_^/ 下一期再讨论如何使用,现在直接睡觉了。