使用 MinGW/MSYS 制作“xz-5.2.1”时出错
Posted
技术标签:
【中文标题】使用 MinGW/MSYS 制作“xz-5.2.1”时出错【英文标题】:Error during making "xz-5.2.1" with MinGW/MSYS 【发布时间】:2015-04-30 06:46:13 【问题描述】:我正在尝试在 MinGW/MSYS 环境中编译“xz-5.2.1”。我看到以下错误:
#error UINT32_C is not defined and unsigned int is not 32-bit.
error: #error size_t is not 32-bit or 64-bit
我对 MinGW 不熟悉,有人可以对此有所了解吗?看起来缺少一些宏定义。缺少一些头文件?
添加 1
我用来编译xz-5.2.1的命令是:
./configure
./make
错误截图:
一些背景知识,我正在关注link 来编译 Tesseract-OCR 库。而这只是其中的一个步骤。
添加 2
根据错误信息,我检查了sysdefs.h
文件。它包含以下内容:
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
上面的make
输出包含-DHAVE_CONFIG_H
,所以我认为应该包括系统头文件<config.h>
。
但是很奇怪,我搜索了C:\MinGW\include
,没有这样的文件。所以我GUESS这可能导致了第 57 行的未定义 UINT_MAX
警告。然后是第 58 行的 UINT32_C is not defined
错误。
但是不知道为什么系统头文件config.h
不见了,从哪里得到。
添加 3
我对@987654340@ 进行了一些研究。 幸运的是我发现以下命令可以继续我的构建过程:(虽然我仍然不太确定它为什么会起作用。我所知道的是它可能与可移植性有关。 )
autoheader (this generates the config.h.in file)
./Configure (this generates the config.h file from the config.h.in file)
现在,我的构建过程被另一个问题阻止了,如下所示:
这似乎是一个已知问题。另一个thread 已经解决了这个问题。
(我会继续更新我的进度。)
【问题讨论】:
您需要提供更多关于您尝试构建xz-5.2.1
的如何的详细信息——例如您发出的命令会产生这些错误消息——使任何人都能有效地回答。 FWIW,sourceforge.net/p/mingw/bugs/2216/#f4cc 处的错误跟踪器注释表明 xz-5.2.1
在 MSYS 下使用 MinGW 成功构建,提供您的 /mingw/lib
树没有被与您的安装不匹配的 *.la
文件污染。
@KeithMarshall 我将编译命令添加到我的问题中。
config.h
是不是系统标头;它是专门为每个单独的项目生成的,当您运行 ./configure
时,它应该存在于您项目的构建目录中。
顺便说一句,当您为 MinGW 构建运行配置时,在 MSYS 中,您应该始终指定 --prefix
参数;通常你想要 MinGW 安装目录的绝对 Windows 路径,例如./configure --prefix=C:/MinGW
,(但确实使用斜杠而不是反斜杠,MSYS shell 将其解释为转义)。
另一个顺便说一句:通常最好将构建目录与源代码树分开,或者至少作为顶部源目录的build
子目录。在后一种情况下,将您的 build
目录作为 CWD,您将运行 ../configure --prefix=C:/MinGW
。
【参考方案1】:
如果您想要一种更简单的方法来处理这种依赖管理或工具链功能的一般更新,我强烈建议您切换到带有 MinGW-w64 的 MSYS2。
这两个项目都旨在(并成功)带来更好的原始版本。 MSYS2 带有大量可以轻松安装的第三方库。 MinGW-w64 允许 GCC 具有完整的 C++11/14/... 支持和扩展的 Windows API 可用性,以及一些有用的扩展和更多最新的标头。您会注意到大多数源自系统标头的问题都已经解决了,要么通过下面的 MinGW-Packages 脚本,要么通过上游(MinGW-w64 或项目本身)。
具体来说,我建议以下步骤:
-
Install and update MSYS2.
从开始菜单项打开 MSYS2 命令提示符(或者如果您计划构建 32 位或 64 位的东西,则打开 32 位或 64 位命令提示符)。安装 32-bit,64-bit MinGW-w64 GCC:
pacman -S mingw-w64-i686,x86_64-gcc
安装 tesseract-OCR:
pacman -S mingw-w64-i686,x86_64-tesseract-ocr
以及可选的数据文件:
pacman -S mingw-w64-tesseract-ocr-osd mingw-w64-i686,x86_64-tesseract-ocr-eng
你就完成了。当然,你仍然可以自己编译各种依赖,但何必呢?如果你真的想要,你可以从你可以在 MSYS2 中安装的包的构建脚本开始,这些包位于这里:
https://github.com/Alexpux/MINGW-packages
只需打开 PKGBUILD 文件,您就可以看到所需的构建步骤。请注意,所有这些脚本都假定依赖项已安装在 MSYS2 中。
另请注意,已安装的软件包和编译器完全独立于 MSYS2,正如您所期望的:您只能将其用作使您的开发树保持最新的工具,并从任何其他 Windows 环境构建。
【讨论】:
也许有些人更喜欢使用 MinGW.org 的产品,因为他们关心为避免侵犯版权和商标而采取的尽职调查。 @rubenvb 我注意到 MSYS2 是从 CygWin 派生的。我想知道我是否可以永远使用 CygWin。 @smwikipedia 最初的 MSYS 也曾经是从 Cygwin 分叉的。问题是,他们没有跟踪上游并坚持使用旧版本。正如我目前所看到的,MSYS2 至少在原则上跟踪上游。请注意 MSYS(2) != Cygwin。 MSYS 提供了一个 Unix shell 环境,主要用于运行 Unix Makefiles 和 Autotools 配置脚本等。 MSYS2 添加了 MinGW-w64 3rd-party 库的二进制存储库(Cygwin 不提供!)。如果您使用 Cygwin 编译本机 Windows 应用程序,您将基本上进行交叉编译,这可能会变得很棘手。如果你需要原生 ... FTR,MSYS2 既不是 MSYS,也不是 Cygwin,但在我看来,它比 MSYS 更像 Cygwin。 MSYS2 由 A.N. 维护。其他与 MinGW.org 无关的人(分发 MSYS 的人); A. N. Other 令人困惑地为他的产品盗用了 MSYS 名称,但他完全忘记了最初的 MSYS minimalist 目标。真正的 MSYS 真的没有必要成为一个成熟的 Cygwin 克隆,因为 MSYS2 似乎即将成为。所以是的,@smwikipedia,我 只会使用真正的交易,即 Cygwin,如果我觉得需要的不仅仅是 MSYS(我没有),而是 YMMV。 MSYS2 由 lexx83/Alexpux、mingwandroid、Elieux 开发,如 Sourceforge 所示。确实与 MinGW.org 没有关联。我从来没有暗示过。 MSYS2 也不像 Cygwin,甚至更接近克隆。基本系统非常小且简约。作为用户,您可以选择使其尽可能完整。但看起来你已经准备好了,好吧,我真的不知道你在这里想要做什么,除了吐出误解以及原版如何更好,因为你认为它更简约。以上是关于使用 MinGW/MSYS 制作“xz-5.2.1”时出错的主要内容,如果未能解决你的问题,请参考以下文章