在 macOS 上的 go 中包装 fortran:ld:找不到 -lgfortran 的库

wrapping fortran in go on macOS: ld: library not found for -lgfortran

提问人:Marty Farce 提问时间:7/27/2023 最后编辑:Alan BirtlesMarty Farce 更新时间:7/28/2023 访问量:76

问:

我正在将一个 fortran 程序包装在一个 go 包装器中,用于对科学模型进行现代化改造,这是在 Windows 上工作的先决条件。我有一台 mac,很好奇如何让它在 M2 芯片上运行。这是我到目前为止在Mac上所做的:

  • 安装并通过 brewgccgfortran
  • 通过构建它go build ./cmd/fort
  • 添加了 CGO 文档// #cgo LDFLAGS: -v

这是我到目前为止的工作的回购:

当我在ldflags配置中使用-v时出现错误

# github.com/marty-farce/fort/cmd/fort
/opt/homebrew/Cellar/go/1.20.6/libexec/pkg/tool/darwin_arm64/link: running cc failed: exit status 1
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin22.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/ld" -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -dynamic -arch arm64 -platform_version macos 13.0.0 13.3 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $WORK/b001/exe/a.out -L/usr/local/lib -headerpad 1144 /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/go.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000000.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000001.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000002.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000003.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000004.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000005.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000006.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000007.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000008.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000009.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000010.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000011.o /var/folders/w1/nf_07l0x6xq6t9yx9wdz9vlw0000gn/T/go-link-2078530619/000012.o
-lgfortran -framework CoreFoundation -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/14.0.3/lib/darwin/libclang_rt.osx.a
ld: library not found for -lgfortran
clang: error: linker command failed with exit code 1 (use -v to see invocation)

最主要的是链接器找不到库,尽管寻找“-lgfortran”,我怀疑我没有正确包含库。我尝试弄乱 cgo LDFLAGS 变量以包含 gfortran 二进制文件的位置,使 LDFLAGS 变量行看起来像这样gfortran

// #cgo LDFLAGS: -L/opt/homebrew/bin -v

但这并没有改变链接器寻找 Gfortran 库的位置,是否有任何链接器人员可以帮助我?

macOS Go Linker-Errors gfortran

评论

0赞 Alan Birtles 7/27/2023
请不要标记不相关的语言。
0赞 Oo.oO 7/27/2023
我过去在基地上遇到了一些问题。前段时间,我决定从头开始构建一切:owsiak.org/......——从那以后再也没有遇到过问题。brewgfortran
0赞 Mark Setchell 7/27/2023
我想你需要添加-L /opt/homebrew/lib

答:

1赞 Marty Farce 7/28/2023 #1

您需要做的是找到“libgfortran”库的位置,macOS 有一个非常规的文件系统(我是 mac 的新手,但我来自 linux 背景),我这样做的方式是

tree . > ~/Desktop/file

并在该 treed 文件中搜索“libgfortran”。我得到了路径“-L/opt/homebrew/lib/gcc/13”,将其放入应用程序中,现在它构建是因为它找到了库。我在 repo 中添加了一个提交来显示我的意思