Распространение двоичного кода, скомпилированного в gfortran, пользователям Ma c OS X, у которых нет Xcode? - PullRequest
1 голос
/ 06 апреля 2020

Я преподаю класс, в котором я хотел бы, чтобы студенты запускали предварительно скомпилированную программу командной строки на своих ноутбуках. У некоторых студентов есть Windows; другие имеют Ма c. Мне удалось создать автономный бинарный файл, который пользователи Windows могут просто вставить в свой рабочий каталог и запустить.

К моему удивлению, мне гораздо сложнее сделать то же самое для пользователей Ма c. В частности, представляется невозможным скомпилировать отдельную двоичную программу со всеми необходимыми статически связанными библиотеками. К конкретным библиотекам, которые должны присутствовать, относятся libgfortran и libquadmath, поскольку компилятор gfortran используется для компиляции устаревшего кода F77 (и это слишком большая программа для преобразования на другой язык).

Таким образом, единственное потенциально работоспособное решение, которое я нашел на данный момент, состоит в том, чтобы студенты сначала установили Xcode, затем инструменты командной строки Xcode и, наконец, gfortran на свой компьютер, прежде чем мой исполняемый файл найдет библиотеку gfortran и запустится. Но это слишком много работы (и дискового пространства) для того, что я хочу, чтобы они делали.

Мой вопрос: есть ли способ, которым я упускаю возможность компилировать мою программу в полностью самостоятельно? форма? Очевидно, мне трудно экспериментировать, потому что в нем участвуют компьютеры других людей.

РЕДАКТИРОВАТЬ: я нашел следующий пост, который описывает по существу ту же проблему: https://groups.google.com/forum/#! Topic / comp.lang.fortran / TPEQQEwa0HI К сожалению, данное решение не работает для меня, даже после того, как я удалю некоторые опции и сделаю соответствующие замены.

1 Ответ

0 голосов
/ 07 апреля 2020

Решение, к которому вы подключились, включает в себя -stati c -libgfortran, но не -stati c -libg cc, поэтому, возможно, стоит добавить второе из них.

Для базового кода Hello World я получаю:

[~] oldrabbit $ otool -L a.out 
a.out:
    /usr/local/opt/gcc/lib/gcc/8/libgfortran.5.dylib (compatibility version 6.0.0, current version 6.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
    /usr/local/lib/gcc/8/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/local/opt/gcc/lib/gcc/8/libquadmath.0.dylib (compatibility version 1.0.0, current version 1.0.0)
[~] oldrabbit $ gfortran -static-libgfortran -static-libgcc hello.f90 
[~] oldrabbit $ otool -L a.out 
a.out:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
    /usr/local/opt/gcc/lib/gcc/8/libquadmath.0.dylib (compatibility version 1.0.0, current version 1.0.0)

, поэтому похоже, что библиотека libquadmath все еще может быть проблемой. Если вы можете найти путь к .a-версии этого, вы можете попробовать включить его, как в примере, на который вы ссылались.

...