Macos OSX上gfortran库中静态链接的正确方法

Macos OSX上gfortran库中静态链接的正确方法,macos,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.

我想发布一个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)

我想这就是你一开始想要的。没有删除动态库,没有符号链接等等。

这困扰了我多年,但我终于找到了一个简单的方法来修复它。如果删除/重命名动态库,链接器将加载静态版本

cd/usr/local/gfortran/lib

sudo mv libquadmath.0.dylib重命名为_libquadmath.0.dylib