0

我正在尝试使用 MINGW64 和 Msys在 windows10 上构建和安装OpenFst库,但是在使用 make 构建期间出现以下错误。我第一次使用这个命令:

 ./configure --enable-grm --enable-far --enable-ngram-fsts MAKE="mingw32-make"

此命令的某些检查结果不会生成:

checking whether we are cross compiling... no
checking for sysroot... no
checking for a working dd... ./configure: line 7016: cmp: command not found
./configure: line 7016: cmp: command not found
checking for mt... no
checking if : is a manifest tool... no
checking for unistd.h... no
checking if gcc supports -fno-rtti -fno-exceptions... ./configure: line 8930: diff: command `not found`
checking whether to build static libraries... no

其他检查结果正常,是的。然后我使用了make命令:

mingw32-make

它适用于某些文件,然后因该错误而终止:

libtool:   error: can't build x86_64-w64-mingw32 shared library unless -no-undefined is 
specified

这是我第一次使用 MinGW 进行构建。所以,我不知道错误意味着什么,以及是否从负责它的配置中检查结果“否”。

4

1 回答 1

2

这个是正常的。

当仍有未解析的符号时,MinGW 不允许构建共享库 (DLL),因为在 Windows 上,从 DLL 引用的每个符号都必须指向存在的东西。在其他平台上,这并不总是必需的。

所以你应该在链接时传递给-Wl,-no-undefinedgcc

对于使用 autoconf 的项目configure,如果它是足够新的 autoconf 版本,通常已经完成。否则,您可能需要添加LDFLAGS="-Wl,-no-undefined"到配置行。如果这没有帮助,您可以尝试在libtool生成的文件中更改它configure

所以特别是你可以在 MSYS/MSYS2 shell 中试试这个:

./configure LDFLAGS="-Wl,-no-undefined"

如果这不起作用,你也可以试试这个(在configure命令之后和运行之前make):

sed -i.bak -e "s/\(allow_undefined=\)yes/\1no/" libtool

其他构建工具,如 cmake、meson 或 scons 已经知道如何构建 Windows DLL,不需要特殊处理。

于 2021-09-17T07:57:16.210 回答