我有一个要分发的 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/