libtool: error: can't build x86_64-w64-mingw32 shared library unless -no-undefined is specified
libtool: error: can't build x86_64-w64-mingw32 shared library unless -no-undefined is specified
我正在尝试使用 MINGW64 和 Msys 在 windows10 上构建和安装 OpenFst 库,但在使用 make 构建期间出现以下错误。我第一次使用这个命令:
./configure --enable-grm --enable-far --enable-ngram-fsts MAKE="mingw32-make"
此命令的一些检查结果生成 no:
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 进行构建。所以,我不知道错误是什么意思,也不知道是否从负责它的配置中检查结果为“否”。
这是正常的。
MinGW 不允许在仍有未解析的符号时构建共享库 (DLL),因为在 Windows 从 DLL 引用的每个符号都必须指向存在的内容。在其他平台上,这并不总是必需的。
所以你应该在链接时传递给-Wl,-no-undefined
到gcc
。
对于使用 autoconf 的 configure
的项目,如果它是足够新的 autoconf 版本,通常已经完成了。否则,您可能需要将 LDFLAGS="-Wl,-no-undefined"
添加到配置行。
如果这没有帮助,您可以尝试在 configure
.
生成的 libtool
文件中进行更改
具体来说,您可以在 MSYS/MSYS2 shell:
中尝试
./configure LDFLAGS="-Wl,-no-undefined"
如果这不起作用,您也可以尝试这个(在 configure
命令之后和 运行 make
之前):
sed -i.bak -e "s/\(allow_undefined=\)yes/no/" libtool
其他构建工具,如 cmake、meson 或 scons 已经知道如何构建 Windows DLL,不需要特殊处理。
我正在尝试使用 MINGW64 和 Msys 在 windows10 上构建和安装 OpenFst 库,但在使用 make 构建期间出现以下错误。我第一次使用这个命令:
./configure --enable-grm --enable-far --enable-ngram-fsts MAKE="mingw32-make"
此命令的一些检查结果生成 no:
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 进行构建。所以,我不知道错误是什么意思,也不知道是否从负责它的配置中检查结果为“否”。
这是正常的。
MinGW 不允许在仍有未解析的符号时构建共享库 (DLL),因为在 Windows 从 DLL 引用的每个符号都必须指向存在的内容。在其他平台上,这并不总是必需的。
所以你应该在链接时传递给-Wl,-no-undefined
到gcc
。
对于使用 autoconf 的 configure
的项目,如果它是足够新的 autoconf 版本,通常已经完成了。否则,您可能需要将 LDFLAGS="-Wl,-no-undefined"
添加到配置行。
如果这没有帮助,您可以尝试在 configure
.
libtool
文件中进行更改
具体来说,您可以在 MSYS/MSYS2 shell:
中尝试./configure LDFLAGS="-Wl,-no-undefined"
如果这不起作用,您也可以尝试这个(在 configure
命令之后和 运行 make
之前):
sed -i.bak -e "s/\(allow_undefined=\)yes/no/" libtool
其他构建工具,如 cmake、meson 或 scons 已经知道如何构建 Windows DLL,不需要特殊处理。