【问题标题】:LNK1127 on lib file generated from .def (for a gfortran dll)从 .def 生成的 lib 文件上的 LNK1127(用于 gfortran dll)
【发布时间】:2019-08-27 17:20:25
【问题描述】:

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

我正在做一个 scipy 的自定义构建。当前失败的步骤是在将依赖于 fortran dll 编译器的 c dll 与 Mingw gfortran 链接时。

确切的错误行是

build\temp.win-amd64-3.5\Debug\libdqag.I4OTSSA4SIYUTZ6NF6DULDGYRZ5LBVRR.gfortran-win_amd64.lib : 致命错误 LNK1127: 库已损坏

所以我认为是那些在命令行中链接的库中的那个库是损坏的。

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

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

但是当使用该 lib 文件作为最后的链接行时,我得到了 LNK1127。

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

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

【问题讨论】:

    标签: visual-studio-2015 linker


    【解决方案1】:

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

    __IMPORT_DESCRIPTOR_mkl_rt @19 DATA
    __NULL_IMPORT_DESCRIPTOR @20 DATA
    

    我使用自定义构建步骤删除了它,并且 lib.exe 从 def 文件生成的 lib 不再被 link.exe 视为损坏

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多