Неопределенная ссылка, ошибка при связывании Plplot с GFortran - PullRequest
3 голосов
/ 06 декабря 2010

Я попытался скомпилировать следующий код на Фортране, найденный в http://techlogbook.wordpress.com/200...-kubuntu-8-04/

program testplplot2d
use plplot
implicit none
real(plflt),dimension(6) :: x,y
real(plflt)::xmin,xmax,ymin,ymax
x=(/1,2,3,4,5,6/)
y=x**2
write(*,*) y
call plinit()
xmin=1.0
xmax=6.0
ymin=1.0
ymax=40.0
call plcol0(1)
call plenv(xmin,xmax,ymin,ymax,0,0)
call pllab('X','Y','Test 1D plot')
call plpoin(x,y,9)
call plline(x,y)
y=x**3
call plpoin(x,y,9)
call plline(x,y)
call plend()

end program testplplot2d

Я использовал следующую команду при попытке скомпилировать программу:

gfortran -I/usr/lib/fortran/modules/plplot testplot2d.f90 -o testplot2d

Однако я получилсообщение об ошибке связывания подробно описано ниже:

/tmp/cckSqEg4.o: In function `MAIN__':
testplot2d.f90:(.text+0x10c): undefined reference to `plinit_'
testplot2d.f90:(.text+0x154): undefined reference to `plcol0_'
testplot2d.f90:(.text+0x181): undefined reference to `plenv_'
testplot2d.f90:(.text+0x1a6): undefined reference to `__plplotp_MOD_pllab'
testplot2d.f90:(.text+0x248): undefined reference to `__plplot_MOD_plpoin'
testplot2d.f90:(.text+0x2e5): undefined reference to `__plplot_MOD_plline'
testplot2d.f90:(.text+0x3c6): undefined reference to `__plplot_MOD_plpoin'
testplot2d.f90:(.text+0x463): undefined reference to `__plplot_MOD_plline'
testplot2d.f90:(.text+0x46d): undefined reference to `plend_'
collect2: ld returned 1 exit status

Что я должен сделать, чтобы исправить эту проблему?(Я читаю справочные страницы по gfortran, и мне кажется, что я использую правильный вариант для связи с библиотекой.)

Ответы [ 3 ]

2 голосов
/ 07 декабря 2010

Сообщения об ошибках, которые вы показываете нам, генерируются компоновщиком, а не компилятором.Я не знаю gfortran, так что то, что следует, может быть широким:

-Я вообще (на компиляторах Linux и Unix, с которыми я знаком) идентифицирует каталог, который содержит файлы для включения в компиляцию, а непри связывании.Для Фортрана файлы .mod, созданные при компиляции модуля, должны быть включены во время компиляции.

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

Компиляторы Linux, с которыми я знаком, используют флаг -L, каталог и сокращенную форму имени библиотеки для идентификации библиотек, которые будутсвязаны между собой.В вашем случае я бы ожидал увидеть что-то вроде:

-L/path/to/installed/lib/files -lplplot

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

1 голос
/ 07 декабря 2010

Я также разместил это на ubuntuforums.Пользователь gmargo отправил следующее решение:

Установите пакет libplplot-dev и затем скомпилируйте его с помощью следующей командной строки:

gfortran testplot2d.f90 -o testplot2d $(pkg-config --cflags --libs plplotd-f95)

Спасибо @belisarius и @ High-Оценка производительности за ваши усилия.

0 голосов
/ 06 декабря 2010

У вас отсутствуют внешние ссылки.

Страница, с которой вы получили код , начинается:

Я установил libplplot из менеджера пакетов Kubuntu Adept и выбрал пакет «libplplot-fortran9 ″.

Полагаю, вы должны сделать то же самое.

...