Компиляция «статического» двоичного файла из Фортрана на Mac - PullRequest
3 голосов
/ 08 октября 2009

Я хотел бы скомпилировать код Fortran на Mac так, чтобы он не зависел от какой-либо общей библиотеки. В конечном счете, я хочу иметь возможность отправлять двоичные файлы другим людям, чтобы они просто работали (при условии, что процессор имеет правильную архитектуру). Я заметил, что g95 и ifort имеют флаг -static, который не работает на Mac.

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

program test
  print *,'hello world'
end program test

и скомпилируйте его с

ifort -static-libgcc -static-intel test.f90

Полученный двоичный файл все еще зависит от нескольких общих библиотек:

valinor:tmp tom$ otool -L a.out 
a.out:
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
    /usr/lib/libmx.A.dylib (compatibility version 1.0.0, current version 315.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 124.1.1)

Так есть ли способ правильно скомпилировать код Fortran, чтобы он не зависел от какой-либо общей библиотеки на Mac?

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Статические библиотеки сложны в Mac OS X по своему дизайну.

См. этот пост для получения дополнительной информации о статических двоичных файлах в Mac OS X.

Теоретически, вы можете сами создавать статические библиотеки и ссылаться на них. Вам нужно будет извлечь библиотеку времени выполнения C из Darwin и скомпилировать ее, libgcc и так далее, статически. Это сработает, но может потребовать некоторой работы.

1 голос
/ 24 октября 2009

Короткий ответ таков: на самом деле вам не нужно полное статическое связывание в Mac OS X. Связывание в статических версиях некоторых библиотек для конкретных продуктов справедливо и хорошо, но системные разделяемые библиотеки - это просто общие библиотеки всегда найду на любом Mac, с гарантированной совместимостью от Apple.

PS: Вы можете избавиться от libgcc_s, фактически указав -static-libgcc в вашей командной строке. Не то чтобы это стоило делать каким-либо образом, но ...

...