2013-07-11 21 views
10

Mam program fortranowy, który chciałbym rozpowszechniać, więc chciałbym statycznie linkować w bibliotekach gfortran.Poprawny sposób statycznego linkowania w bibliotekach gfortran na OSX

Gdybym skompilować program z następujących flag:

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

otool mówi mi to statycznie związane w większości gofrtran bibliotek, ale nie 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) 

Jest statyczny libquadmath biblioteka /usr/local/gfortran/lib/libquadmath.a, ale każda linia linków, którą próbowałem, zawsze kończyła się pełnym linkiem statycznym (który nie jest obsługiwany w OSX) lub linkiem dynamicznym do libquadmath.

Udało mi się stworzyć to, co chcę, usuwając libquadmath.0.dylib i libquadmath.dylib z/usr/local/gfortran/lib /, a linker następnie pobiera bibliotekę statyczną.

Jednak wydaje się, że jest to trochę niezręczne.

Czy ktoś może zaproponować bardziej elegancki sposób robienia tego?

Dzięki!

Odpowiedz

0

Wiem, że to bardzo stary tracker, ale może ktoś nadal będzie zainteresowany rozwiązaniem, które działa.

Powiedzmy mamy kod:

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

pierwszy, skompilować rzeczy:

gfortran -c -o fort_sample.o fort_sample.f90 

Następnie, link rzeczy

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 

Można go wykonać

./fort_sample 
Hello 

Można zauważyć, że quadmath już nie ma

> otool -L fort_sample 
fort_sample: 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.51.1) 

myślę, że to jest to, czego szukaliśmy w pierwszej kolejności. Brak usuwania dylib, brak dowiązań symbolicznych itp.

Powiązane problemy