2013-07-11 1 views
10

Ho un programma fortran che mi piacerebbe distribuire, quindi mi piacerebbe collegare staticamente nelle librerie gfortran.Modo corretto per il collegamento statico nelle librerie gfortran su OSX

Se compilo il programma con i seguenti flag:

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

otool me è un collegamento statico nella maggior parte delle librerie gofrtran racconta, ma non 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) 

C'è una libquadmath statica libreria /usr/local/gfortran/lib/libquadmath.a, ma ogni linea di collegamento che ho provato ha sempre finito con un collegamento statico completo (che non è supportato su OSX) o un collegamento dinamico a libquadmath.

Sono riuscito a creare ciò che voglio rimuovendo libquadmath.0.dylib e libquadmath.dylib da/usr/local/gfortran/lib /, e il linker quindi estrae la libreria statica.

Tuttavia, questo sembra a dir poco un po 'goffo.

Qualcuno può suggerire un modo più elegante di farlo?

Grazie!

risposta

0

So che questo è un tracker molto vecchio, ma forse qualcuno sarà ancora interessato alla soluzione che funziona.

Diciamo che abbiamo il codice:

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

In primo luogo, compilare la roba:

gfortran -c -o fort_sample.o fort_sample.f90 

Poi, roba collegamento

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 

È possibile eseguirla

./fort_sample 
Hello 

Si può notare che quadmath non c'è più

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

Credo che questo è ciò che stavate cercando in un primo posto. Nessuna rimozione di dylibs, nessun collegamento simbolico, ecc.