2013-07-11 65 views
10

我有一个我想要分发的fortran程序,所以我想静态链接到gfortran库中。在OSX上的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 /本地/ gfortran/lib中/和链接器去除libquadmath.0.dylib和libquadmath.dylib然后在静态库拉。

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

任何人都可以提出一个更优雅的方式来做到这一点?

谢谢!

回答

0

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

比方说,我们有一些代码:

! 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) 

我猜这就是你要找的人在首位。没有删除dylibs,没有符号链接等。