我正在尝试编译一个用 Fortran 编写的软件,它还需要一些用 C 编写的库。该软件最初是为了在 x86 linux 架构上编译而编写的,但我试图在我的 Mac 上使用 Apple Silicon (M1 Max )。我能够修改脚本和源代码,以消除绝大多数错误和/或警告,但我现在坚持使用 ranlib 和 ar 链接库。
编译时,产生的错误如下:
ar rv mapst.a \*.o
a - ispand.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive member: mapst.a(ispand.o) cputype (16777228) does not match previous archive members cputype (16777223) (all members must match)
rm -f ispand.o
ranlib mapst.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive member: mapst.a(ispand.o) cputype (16777228) does not match previous archive members cputype (16777223) (all members must match)
据我了解,问题是由编译器的标志引起的。目前,makefile 有以下标志:
FTN = gfortran
FFLAGS = -O3 -Wuninitialized -fno-f2c -fno-automatic -fno-range-check -fno-backslash
CC = /usr/bin/gcc
CFLAGS = -c
将“-m64”添加到gfortran(顺便说一下,这是自制程序的gcc提供的编译器)标志,没有任何变化,而将“-arch arm”添加到gcc标志,将体系结构从16777228更改为12,但是无论如何,错误仍然存在。
您对我应该如何修改 Makefile 以编译该软件有什么建议吗?
解决了!我发现这个问题与 C 和 Fortran 使用的不同编译器有关:虽然 gcc 来自 xcode,但 gfortran 是使用brew 安装的。正如怀疑的那样,该问题与默认情况下为两种略有不同的体系结构编译的库有关(gcc 为 arm64-apple-darwin23.1.0,gfortran 为 x86_64-apple-darwin22)。我已将
-target x86_64-apple-darwin22
标志添加到 gcc 规则中来解决该问题。谢谢大家!