2013-07-11 1 views
10

У меня есть программа fortran, которую я хотел бы распространять, поэтому я бы хотел статически ссылаться в библиотеках gfortran.Правильный способ статической ссылки в библиотеках gfortran на OSX

Если я скомпилировать программу со следующими флагами:

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 /, а компоновщик затем вставляет статическую библиотеку.

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

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

Спасибо!

ответ

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) 

Я думаю, это то, что вы искали в первую очередь. Отсутствие удаления дилибов, отсутствие символических ссылок и т. Д.

Смежные вопросы