提问人:Marty Farce 提问时间:7/27/2023 最后编辑:Alan BirtlesMarty Farce 更新时间:7/28/2023 访问量:76
在 macOS 上的 go 中包装 fortran:ld:找不到 -lgfortran 的库
wrapping fortran in go on macOS: ld: library not found for -lgfortran
问:
我正在将一个 fortran 程序包装在一个 go 包装器中,用于对科学模型进行现代化改造,这是在 Windows 上工作的先决条件。我有一台 mac,很好奇如何让它在 M2 芯片上运行。这是我到目前为止在Mac上所做的:
- 安装并通过 brew
gcc
gfortran
- 通过构建它
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 库的位置,是否有任何链接器人员可以帮助我?
答:
1赞
Marty Farce
7/28/2023
#1
您需要做的是找到“libgfortran”库的位置,macOS 有一个非常规的文件系统(我是 mac 的新手,但我来自 linux 背景),我这样做的方式是
tree . > ~/Desktop/file
并在该 treed 文件中搜索“libgfortran”。我得到了路径“-L/opt/homebrew/lib/gcc/13”,将其放入应用程序中,现在它构建是因为它找到了库。我在 repo 中添加了一个提交来显示我的意思
评论
brew
gfortran
-L /opt/homebrew/lib