Правильный способ статической ссылки в gfortran-библиотеках на OSX

У меня есть программа 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.

Мне удалось создать то, что я хочу, удалив libquadmath.0.dylib и libquadmath.dylib из /usr/local/gfortran/lib/, а компоновщик затем вставляет статическую библиотеку.

Однако это кажется несколько неуклюжим, если не сказать больше.

Может ли кто-нибудь предложить более элегантный способ сделать это?

Спасибо!

Ответ 1

Я знаю, что это очень старый трекер, но, возможно, кто-то будет по-прежнему заинтересован в решении, которое работает.

Скажем, у нас есть код:

! 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, никаких символических ссылок и т.д.