在 Apple Silicon 上进行 x86 编译的 Fortran/C 程序

问题描述 投票:0回答:1

我正在尝试编译一个用 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 gfortran apple-silicon
1个回答
0
投票

解决了!我发现这个问题与 C 和 Fortran 使用的不同编译器有关:虽然 gcc 来自 xcode,但 gfortran 是使用brew 安装的。正如怀疑的那样,该问题与默认情况下为两种略有不同的体系结构编译的库有关(gcc 为 arm64-apple-darwin23.1.0,gfortran 为 x86_64-apple-darwin22)。我已将

-target x86_64-apple-darwin22
标志添加到 gcc 规则中来解决该问题。谢谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.