从 .def 生成的 lib 文件上的 LNK1127(对于 gfortran dll)

LNK1127 on lib file generated from .def (for a gfortran dll)

链接到从 .def 文件生成的 .lib 文件会触发 LNK1127:库已损坏

我正在对 scipy 进行自定义构建。当前失败的步骤是 linking 一个 c dll,它将依赖于带有 Mingw gfortran 的 fortran dll 编译器。

准确的错误行是

build\temp.win-amd64-3.5\Debug\libdqag.I4OTSSA4SIYUTZ6NF6DULDGYRZ5LBVRR.gfortran-win_amd64.lib : fatal error LNK1127: library is corrupt

所以我假设在命令行中 linked 的那个库是损坏的。

Gfortran 生成了 fortran .dll 和一个 .def 文件

然后lib.exe从.def文件生成.lib文件

但是当在最后的 link 行中使用那个 lib 文件时,我得到了 LNK1127。

似乎我不能将损坏的文件归咎于 gfortran,因为 lib.exe 生成了它。 def 文件对我来说看起来有效,lib.exe 没有抱怨。 dumpbin 也不是。 .lib 是正确的输出平台 (x64)。 Scipy 构建脚本出于某种原因使用了 x86_64 visual studio 工具(x86 二进制文件构建 x64 二进制文件),但这没有明显的问题。

关于如何调试这个的任何提示? 一个工具来检查 def 或 lib 文件中可能有什么问题? 还是命令行误导了我,另一个 lib 文件是损坏的文件?

好的,看来 visual c++ 链接器不喜欢 .def 中的某些行生成的错误 gfortran。 Fortran dll 与 mkl_rt.lib 链接,因此输出 .def 具有符号

__IMPORT_DESCRIPTOR_mkl_rt @19 DATA
__NULL_IMPORT_DESCRIPTOR @20 DATA

我通过自定义构建步骤删除了它,lib.exe 从 def 文件生成的库不再被 link.exe

认为是损坏的