【问题标题】:Why is MinGW not recognizing my object files when compiling?为什么 MinGW 在编译时无法识别我的目标文件?
【发布时间】:2020-06-17 22:50:38
【问题描述】:

我在 64 位 Windows 上使用 mingw,试图编译一个 fortran 程序。链接库时,返回错误:

E:/Users/Malcolm/netcdf-4.1.3-antho/lib\libnetcdf.a: member E:/Users/Malcolm/netcdf-4.1.3-antho/lib\libnetcdf.a(libnetcdf_la-stub.o) in archive is not an object

当我在存档文件上使用nm时,它说目标文件的文件格式无法识别:

e:\mingw-w64\mingw32\bin\nm.exe: libnetcdf_la-stub.o: File format not recognized ... 其余的目标文件等等。

如果我在使用 7zip 从存档中提取其中一个单独的目标文件后使用file,它会返回“ACB 存档数据”。

如果有帮助,下面是我的 Makefile 的编译器标志部分:


OUTPUTLIB = -LE:/Users/Malcolm/netcdf-4.1.3-antho/lib

OUTPUTOPT = -DNETCDF

LINKOPTS = -lnetcdf -lnetcdff

FC = gfortran

OPTS = -ffree-form -ffree-line-length-none -O3 -finline-functions -fopenmp -fconvert=big-endian

OPTS += -static-libgfortran -static-libgcc

OPTS += -Wl,-Bstatic,--whole-archive -lstdc++ -lpthread -lnetcdf -lnetcdff -lgomp -lquadmath -Wl,--no-whole-archive -Wl,--stack,2147483647, --verbose

CPP = cpp -C -P -traditional -Wno-invalid-pp-token -ffreestanding

在这个项目之前我没有使用过 mingw,所以我可能缺少一些基本的东西。

【问题讨论】:

  • libnetcdf.a 是从哪里来的?您应该得到一个为相同目标架构(win32 或 win64)构建的版本,最好使用相同的 MinGW 编译器构建。
  • 我是从别人那里得到的(谁在 win64 上做的)。我会问他们用什么编译器,谢谢你的建议。

标签: compiler-errors compilation fortran mingw gfortran


【解决方案1】:

好的,我已经解决了这个问题。我用的是mingw32,也在mingw-w64上试过,没想到我安装的是32位的i686版本。

我安装了 mingw 的 x86_64 版本,这是用于编译我正在使用的库的版本,它在那里工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2019-04-12
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多