LINUX.ORG.RU

Fortran и OpenGL


0

0

Решил поиграться с OpenGLем, написал простенькую прогу и застопорился на компиляции. Не могу подключить правильные библиотеки.

g77 testgl.f -o testgl -L/usr/X11R6/lib -lGL -lOSMesa не работает. Какие библиотеки еще нужны?

P.S. Если вопрос глупый просьба ногами не бить, гугл не помог.

Попробуй добавить эту строчку '-lGLU -lXmu -lXt -lX11 -lXi -lm -pthread'. Если ты используешь GLUT нужно добавить -lglut, если не используешь, напиши через что ты ввыводишь OpenGL.

anonymous
()

Как видишь libGLU.a и libglut.a отсутствуют:

[ematvien@cabernet gl]$ ls /usr/X11R6/lib/libgl
libglut.so.3      libglut.so.3.7.0
[ematvien@cabernet gl]$ ls /usr/X11R6/lib/libglut*
/usr/X11R6/lib/libglut.so.3@  /usr/X11R6/lib/libglut.so.3.7.0*

Код взят из Бартеньева:

[ematvien@cabernet gl]$ cat bart.f
      program gllines

       call initgl('Пример')

       call fglBegin(gl_lines)
        call fglColor3f ( 0.0, 1.0, 1.0 )
        call fglVertex2f(-0.5, 0.5 )
        call fglVertex2f( 0.5, 0.5 )
        call fglColor3f ( 0.0, 1.0, 1.0 )
        call fglVertex2f(-0.5,-0.5 )
        call fglVertex2f( 0.5, 0.5 )
       call fglEnd()
       call fglFlush()
       call sleep( 3000 )
       call fauxQuit()

      end

      subroutine initgl(title)

       character(*) title
       integer result,w,h

       w = 300
       h = 60

       call fauxInitDisplayMode( aux_rgb )
       call fauxInitPosition( 0,0,w,h )
       result = fauxInitWindow( title )
       call fglClearColor( 0.8, 0.8, 0.8, 1.0 )
       call fglClear( gl_color_buffer_bit )
       call fglMatrixMode( gl_projection )
       call fglLoadIndentity()
       call fglOrtho( dble(-1.0),dble(1.0), dble(-1.0),dble(1.0)
     &              , dble(-1.0),dble(1.0)  )

       return
       end

При компиляции выдает:
[ematvien@cabernet gl]$ g77 -o bart bart.f -L/usr/X11R6/lib/ -lGL -lOSMesa -lXmu -lXt -lX11 -lXi -lm -pthread
/home/ematvien/tmp/cc05aRMk.o: In function `MAIN__':
/home/ematvien/tmp/cc05aRMk.o(.text+0x20): undefined reference to `fglbegin_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x3a): undefined reference to `fglcolor3f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x4f): undefined reference to `fglvertex2f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x64): undefined reference to `fglvertex2f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x7e): undefined reference to `fglcolor3f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x93): undefined reference to `fglvertex2f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0xa8): undefined reference to `fglvertex2f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0xb0): undefined reference to `fglend_'
/home/ematvien/tmp/cc05aRMk.o(.text+0xb5): undefined reference to `fglflush_'
/home/ematvien/tmp/cc05aRMk.o(.text+0xca): undefined reference to `fauxquit_'
/home/ematvien/tmp/cc05aRMk.o: In function `initgl_':
/home/ematvien/tmp/cc05aRMk.o(.text+0xfa): undefined reference to `fauxinitdisplaymode_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x114): undefined reference to `fauxinitposition_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x125): undefined reference to `fauxinitwindow_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x15d): undefined reference to `fglclearcolor_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x16c): undefined reference to `fglclear_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x17b): undefined reference to `fglmatrixmode_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x183): undefined reference to `fglloadindentity_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x1a9): undefined reference to `fglortho_'
collect2: ld returned 1 exit status

По ходу мне еще какие-то библиотеки доставить надо?

ksherhan
() автор топика
Ответ на: комментарий от ksherhan

Данный пример и не должен компилироваться т.к. в нем используется поделка компании Microsoft - библиотека glaux (к ней относятся все функции с префиксом faux) - урезанный и не межплатформенный аналог GLUT. В какой библиотеке лежат остальные функции (fgl*) и существуют ли они вобще под Linux я не знаю. В мелкомягкой реализации фортрана они описывались в файлах с расширением mod.

На мой взгляд ответ на вопрос "Как скрестить g77 и OpenGL?" тебе нужно искать на сайте http://gcc.gnu.org и листе рассылки разработчиков gcc.

Я нашел только одно упоминание по g77 и OpenGL и то бестолковое
http://gcc.gnu.org/ml/gcc-help/2002-07/msg00096.html

anonymous
()

Я правильно понял, что все процедуры используемые в этом примере - МС реализация? В том числе и fglVertex2f?

ksherhan
() автор топика

>Я правильно понял, что все процедуры используемые в этом примере - МС реализация? В том числе и fglVertex2f?
нет, только те, которые начинаются на faux,
кстати, я не знаток фортрана, но ты уверен, что надо fglVertex2f а не glVertex2f?

Anonymous ★★★★★
()
Ответ на: комментарий от Anonymous

>>Я правильно понял, что все процедуры используемые в этом примере - МС реализация? В том числе и fglVertex2f? >>нет, только те, которые начинаются на faux, fglVertex2f и другие fgl* - просто псевдонимы стандартных OpenGL'ких функций, они описываются в opengl.mod файле из поставки мелкомягкого фортрана (насчет компаковского незнаю). Подробней про них я ничего сказать не могу т.к. нет под рукой мелкомягкого фортрана.

Evgeny_I
()

>fgl* - просто псевдонимы стандартных OpenGL'ких функций
я примерно так и понял, но


home/ematvien/tmp/cc05aRMk.o: In function `MAIN__':
/home/ematvien/tmp/cc05aRMk.o(.text+0x20): undefined reference to `fglbegin_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x3a): undefined reference to `fglcolor3f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x4f): undefined reference to `fglvertex2f_'
/home/ematvien/tmp/cc05aRMk.o(.text+0x64): undefined reference to `fglvertex2f_'
...
collect2: ld returned 1 exit status

к фортрану это уже отношения не имеет, в -lGL -lGLU etc таких функций нет, следовательно, либо надо подключить какую-нибудь "-lFortranGL", либо вызывать те функции которые есть в стандартных библиотеках (glBegin glColor3f glVertex2f... ) ... по моему так...


P/S
можно еще на
http://www.opengl.org.ru/cgi-bin/ultra/UltraBoard.cgi?action=Headlines&BI...
попробовать спросить

Anonymous ★★★★★
()

неужели так трудно - посмотреть, что за функции есть в библиотеке? :)

SadStork
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.