Fortran PLplot: вызов подпрограммы PLsetopt приводит к ошибке компилятора

#fortran #plplot

#fortran #plplot

Вопрос:

 Ubuntu 20.04.1 64-bit
Kernel Linux 5.4.0-42-generic x86_64
MATE 1.24.0
gfortran: GNU Fortran (Ubuntu 9.3.0-10ubuntu2) 9.3.0
PLplot library version: 5.15.0

pkg-config --cflags --libs plplot-fortran :
 -I/usr/include/plplot 
 -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot 
 -I/usr/include/plplot 
 -lplplotfortran
  

В моей Fortran-Program ( USE PLplot ) есть CALL s для PLgver , PLsdev , PLsfnam PLsetopt , PLinit PLsori , PLenv PLlab PLscolbg , PLcol0 PLcol1 PLfill , PLpoin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, и,,. Компиляция программы с gfortran test-plplot.f90 $(pkg-config --cflags --libs plplot-fortran) приводит к:

    24 | CALL PLsetopt ("-geometry","1280x720") ! ... generic 'plsetopt' at (1)
      |                                                                       1
Error: There is no specific subroutine for the generic ‘plsetopt’ at (1)
  

Все остальные CALL подпрограммы PLplot работают (что может быть доказано при комментировании строки с помощью PLsetopt ).

Ответ №1:

Модуль plplot определяет общее имя plsetopt как функцию, а не подпрограмму.

Измените вызов процедуры с инструкции call на ссылку на функцию какого-либо рода.

Комментарии:

1. «Модуль plplot определяет общее имя plsetopt как функцию, а не подпрограмму». — Ах, да, я должен был заметить это, например plplot.sourceforge.net/docbook-manual/plplot-html-5.15.0 /… . «Измените вызов процедуры с инструкции вызова на ссылку на функцию какого-либо рода». — Я изменил на PRINT *, 'PLsetopt (...) : ', PLsetopt (...) , и компилятор говорит: Error: There is no specific function for the generic ‘plsetopt’ at (1)

2. Что конкретно у вас есть для ... . У меня это работает…

3. ВЫЗОВИТЕ PLsetopt («геометрия»,»1280×720″)

4. Это все еще оператор call. Что конкретно у вас есть при вызове функции.

5. Извините, скопировано из неправильной версии моей программы. Итак, код — как упоминалось выше — PRINT *, PLsetopt("-geometry","1280x720") . Удивительно (и к счастью), что сейчас — в отличие от нескольких дней назад — ошибки компилятора нет! Итак, эта проблема решена! Но выходные данные имеют размер не 1280×720, а 1600×900, также при использовании PLsetopt("geometry","1280x720") без дефиса.