macos - 在 OSX 上静态链接 gfortran 库的正确方法

标签 macos gfortran

我有一个要分发的 fortran 程序,所以我想静态链接到 gfortran 库中。

如果我使用以下标志编译程序:

gfortran -o myprog -static-libgfortran -static-libgcc  myprog.f

otool 告诉我它在大多数 gofrtran 库中都是静态链接的,但不是 libquadmath:
otool -L myprog

/usr/local/gfortran/lib/libquadmath.0.dylib (compatibility version 1.0.0, current v
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

有一个静态 libquadmath 库 /usr/local/gfortran/lib/libquadmath.a ,但我尝试的每条链接线总是以完整的静态链接(OSX 不支持)或到 libquadmath 的动态链接结束。

我设法通过从/usr/local/gfortran/lib/中删除 libquadmath.0.dylib 和 libquadmath.dylib 来创建我想要的东西,然后链接器会拉入静态库。

但是,至少可以说,这似乎有些笨拙。

谁能建议一种更优雅的方式来做到这一点?

谢谢!

最佳答案

我知道这是非常古老的跟踪器,但也许有人仍然会对有效的解决方案感兴趣。

假设我们有代码:

! fort_sample.f90
program main
  write (*,*) 'Hello'
  stop
end

首先,编译这些东西:
gfortran -c -o fort_sample.o fort_sample.f90

然后,链接东西
ld -o ./fort_sample -no_compact_unwind \
-arch x86_64 -macosx_version_min 10.12.0 \
-lSystem \
/usr/local/gfortran/lib/libgfortran.a \
/usr/local/gfortran/lib/libquadmath.a \
/usr/local/gfortran/lib/gcc/x86_64-apple-darwin16/6.3.0/libgcc.a \
fort_sample.o

你可以执行它
./fort_sample
 Hello

您会注意到 quadmath 不再存在
> otool -L fort_sample
fort_sample:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.51.1)

我想这就是你首先要寻找的东西。没有删除 dylib,没有符号链接(symbolic link)等。

关于macos - 在 OSX 上静态链接 gfortran 库的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17590525/

相关文章:

objective-c - OpenGL GL_POINTS 大小

java - 从任务栏/停靠栏中删除/隐藏 Java 应用程序

python - os x python 2.6 总线错误

random - gfortran 和随机数

performance - 测量每行花费的时间,fortran

swift - 在 macOS 中将 RGB 转换为 HSV

linux - 在 morty : backtrace-supported. h 中构建 libgfortran_6.2.bb 配方时出错:没有这样的文件或目录

fortran - gfortran错误: unexpected element '\' in format string at (1)

Fortran:将任意 "structures"传递给模块子例程

macos - 使用 iTerm2 作为 X11 终端(用于字体、主题等)?