Как запустить код gfortran из возвышенного текста? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть код на Fortran 95, который я компилирую и запускаю на своей ОС Linux через окно терминала, сначала скомпилировав отдельные модули, а затем основную программу.Сейчас я пытаюсь запустить тот же код из возвышенного текста версии 3.0, без использования окна терминала.Я получил мотивацию из этого видео: https://www.youtube.com/watch?v=_eZyTNthJG4

Но когда я ctrl+b строю код, он выдает следующий консольный вывод:

/tmp/cc4nYhyn.o: In function `MAIN__':
problem_main.f95:(.text+0x2e5): undefined reference to `__universal_parameter_declaration_MOD_compute_starts'
problem_main.f95:(.text+0x33e): undefined reference to `__array_creator_MOD_linear_spaced'
problem_main.f95:(.text+0x356): undefined reference to `__derivatives_MOD_dydx'
problem_main.f95:(.text+0x3e4): undefined reference to `__ode_solver_MOD_heun'
problem_main.f95:(.text+0x69e): undefined reference to `__universal_parameter_declaration_MOD_compute_ends'
problem_main.f95:(.text+0x6b0): undefined reference to `__universal_parameter_declaration_MOD_compute_ends'
problem_main.f95:(.text+0x6b8): undefined reference to `__universal_parameter_declaration_MOD_compute_starts'
problem_main.f95:(.text+0x6c4): undefined reference to `__universal_parameter_declaration_MOD_compute_time'
problem_main.f95:(.text+0x726): undefined reference to `__universal_parameter_declaration_MOD_compute_time'
problem_main.f95:(.text+0x988): undefined reference to `__universal_parameter_declaration_MOD_data_write_ends'
problem_main.f95:(.text+0x99a): undefined reference to `__universal_parameter_declaration_MOD_data_write_ends'
problem_main.f95:(.text+0x9a2): undefined reference to `__universal_parameter_declaration_MOD_compute_ends'
problem_main.f95:(.text+0x9ae): undefined reference to `__universal_parameter_declaration_MOD_data_write_time'
problem_main.f95:(.text+0xa10): undefined reference to `__universal_parameter_declaration_MOD_data_write_time'
problem_main.f95:(.text+0xa77): undefined reference to `__universal_parameter_declaration_MOD_plot_ends'
problem_main.f95:(.text+0xa89): undefined reference to `__universal_parameter_declaration_MOD_plot_ends'
problem_main.f95:(.text+0xa91): undefined reference to `__universal_parameter_declaration_MOD_data_write_ends'
problem_main.f95:(.text+0xa9d): undefined reference to `__universal_parameter_declaration_MOD_plot_time'
problem_main.f95:(.text+0xaa5): undefined reference to `__universal_parameter_declaration_MOD_plot_ends'
problem_main.f95:(.text+0xaad): undefined reference to `__universal_parameter_declaration_MOD_compute_starts'
problem_main.f95:(.text+0xab9): undefined reference to `__universal_parameter_declaration_MOD_total_time'
problem_main.f95:(.text+0xb1b): undefined reference to `__universal_parameter_declaration_MOD_plot_time'
problem_main.f95:(.text+0xbad): undefined reference to `__universal_parameter_declaration_MOD_total_time'
collect2: error: ld returned 1 exit status
[Finished in 0.1s with exit code 1]
[shell_cmd: gfortran '/home/vikash/Work/Fort_test/problem_main.f95' -o '/home/vikash/Work/Fort_test/problem_main']
[dir: /home/vikash/Work/Fort_test]
[path: /home/vikash/bin:/home/vikash/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]

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

1 Ответ

0 голосов
/ 29 мая 2018

Sublime имеет возможность выполнять произвольную внешнюю программу или серию команд, которые вы определяете, и это лежит в основе работы Build Systems в Sublime.Система сборки по своей сути является просто определенным набором правил для действий, которые необходимо предпринять для создания вашей программы, ее запуска или выполнения какой-либо другой задачи, например загрузки веб-страницы в браузере во время работы над ней.

Нужно иметь в виду, что Sublime - это текстовый редактор, а не IDE, и такие вещи, как создание программ, могут работать не так, как вы ожидаете, как в других программах.Это часто может застать вас врасплох, потому что, хотя Sublime достаточно мощен в этом отношении, он не обрабатывает все детали низкого уровня и полагается на вас, чтобы заполнить пробелы.

В вашем конкретном случае,похоже, суть вашей проблемы в том, что ваша программа состоит из нескольких модулей, но используемая вами система сборки пытается скомпилировать и связать только тот файл, который вы редактируете в настоящее время.

Sublime не поставляется с включенной поддержкой Fortran, поэтому вы, вероятно, установили пакет для поддержки Fortran.Пакет Fortran содержит следующий файл GFortran.sublime-build для использования здесь в качестве иллюстрации:

{
    "cmd": ["gfortran", "${file}",  "-o",  "${file_base_name}"],
    "file_regex": "^(?xi:( ^[/] [^:]* ) : (\\d+) : (\\d+) :)",
    "working_dir": "${file_path}",
    "selector": "source.modern-fortran, source.fixedform-fortran",
    "syntax": "GFortranBuild.sublime-syntax",
    "windows": {
        "cmd": ["gfortran", "${file}", "-o", "${file_base_name}.exe"]
    },
    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "gfortran \"${file}\" -o \"${file_base_name}\" && \"./${file_base_name}\"",
            "shell": true,
            "windows": {
                "cmd": ["gfortran", "${file}", "-o", "${file_base_name}.exe", "&&", "${file_base_name}.exe"]
            }
        }
    ]
}

В двух словах, эта система сборки будет работать только для компиляции текущего файла или , чтобы скомпилировать текущий файл и затем запустить результат;все остальное «слишком сложно», чтобы оно могло понять.Это звучит как проблема, с которой вы столкнулись;текущий файл компилируется и связывается без учета остальных необходимых файлов, поэтому он не может связать.

Решение здесь состоит в том, чтобы использовать или создать систему сборки, которая делает то, что вы делаетев терминале;скомпилируйте отдельные модули один за другим, а затем свяжите их с основной программой.

Мой лучший совет - использовать соответствующий инструмент для соответствующей работы;например, что-то вроде make может быть предоставлено простой управляющий файл, который сообщает ему, какие файлы составляют ваш проект, и он берет на себя тяжелую работу в отношении знания того, что должно быть скомпилировано, и Sublime уже поддерживает make outиз коробки.Существует множество подобных инструментов в зависимости от вашего языка программирования и среды, которую вы также можете использовать.

Если вам не нужно создать систему сборки, которая знает, как создавать вашу программу, что обычно включаетнаписать что-то, что имитирует то, что вы делаете в терминале вручную, чтобы построить вашу программу.

Вы упомянули в комментариях на свой вопрос, что вы используете sh для запуска файла, который выполняет работу Makefile.Чтобы создать собственную систему сборки, которая делает это, вы должны сделать что-то вроде следующего:

  • Выберите Tools > Build System > New Build System... из меню
  • Измените файл шаблона sublime-build, чтобы запуститьсоответствующие команды
  • Сохраните результат как файл sublime-build в папке по умолчанию. Sublime предложит вам (ваша папка User).

После выполнения этих действийв меню Tools > Build System появится сборка с тем же именем, что и сохраненный файл.

Такая система сборки может выглядеть следующим образом:

{
    "shell_cmd": "sh myfile.txt",
    "working_dir": "${file_path}",
    "selector": "source.modern-fortran, source.fixedform-fortran",
}

selectorделает эту систему сборки доступной автоматически в файлах fortran (по крайней мере, в синтаксисе, определенном пакетом выше), и в этом случае, чтобы использовать это, вы можете либо установить систему сборки на Automatic и выбрать ее для вас, либо вы можете выбратьустановите сборку явно для этого файла сборки, чтобы убедиться, что он используется.

Это позволит использовать оболочку для выполнения myfile.txt после первого переключения текущей директории на местоположение текущего файлаРедактирование.Вы можете настроить его соответствующим образом, например, изменив имя исполняемого файла и убедившись, что рабочий каталог указан правильно, и т. Д.

Обратитесь к Официальной документации для получения дополнительной информации о том, как сборка систем и какие опции доступны для вас.

...