Macos OSX上gfortran库中静态链接的正确方法
我想发布一个fortran程序,所以我想静态链接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.
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