Gfortran和过剩的实用程序:为什么我不能将它们链接到我的可执行文件中?

时间:2014-06-17 05:08:50

标签: opengl fortran windows-xp glut

我试图让opengl在windows下运行(XP 64bit)。我想将FORTRAN程序与opengl“过剩”实用程序相关联。我正在运行这个批处理文件脚本:

REM default folder
@set MY_DIR= K:\E_drive\My_openGL\

REM where the F03G binding is located
@set BINDING_DIR= %My_DIR%fortran_binding\

REM names of the F03G object files
@set MODULES= %BINDING_DIR%/glut_fonts.o  ^
     %BINDING_DIR%opengl_kinds.o  ^
     %BINDING_DIR%opengl_freeglut.o  ^
     %BINDING_DIR%opengl_glu.o  ^
     %BINDING_DIR%opengl_gl.o

REM the compile flags
@set FFLAGS= -Wall -Wextra -pedantic -fcheck=all ^
         -fcheck=do -fwhole-file -funroll-loops -ftree-vectorize ^
         -Wsurprising -Wconversion -Wconversion-extra -static ^
         -I%BINDING_DIR%

@set FFOLDER= C:\Compilers\mingw-w64\i686-4.9.0-posix-dwarf-rt_v3-rev2\mingw32\bin\

%FFOLDER%gfortran %FFLAGS%   -c  RandomSphere_FreeGLUT.f90
%FFOLDER%gfortran %FFLAGS%  RandomSphere_FreeGLUT.o -static %MODULES%   -o randomsphere_freeglut_main

此脚本运行正常,包括编译命令(上面的第二个)。但是,链接命令(上面的最后一个)会创建以下错误消息:

RandomSphere_FreeGLUT.o:RandomSphere_FreeGLUT.f90:(.text+0x3e): undefined reference to `glutInitDisplayMode'
RandomSphere_FreeGLUT.o:RandomSphere_FreeGLUT.f90:(.text+0x4a): undefined reference to `glutCreateWindow'
RandomSphere_FreeGLUT.o:RandomSphere_FreeGLUT.f90:(.text+0x58): undefined reference to `glutSetWindowData'
RandomSphere_FreeGLUT.o:RandomSphere_FreeGLUT.f90:(.text+0x64): undefined reference to `glGenLists'

(... 24 more similar messages about "undefined reference to" something starting with "gl" ...)

C:/Compilers/mingw-w64/i686-4.9.0-posix-dwarf-rt_v3-rev2/mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.0/../../../../i686-w64-mingw32/bin/ld.exe: RandomSphere_FreeGLUT.o: bad reloc address 0x20 in section `.eh_frame'
collect2.exe: error: ld returned 1 exit status

我的解释是链接器无法找到过剩的实用程序(当然我可能是错的!)。我确实有dll“glut32.dll”和“FGlut32.dll”,但我无法将它们的存在传达给链接器(gfortran)。 我已经尝试了很多方法让gfortran找到它们,但都失败了。 如何让gfortran找到这些过剩的实用程序并将它们编译到我的可执行文件中? 这是怎么回事?

1 个答案:

答案 0 :(得分:1)

使用-L and -l的组合,针对您的案例-L/directory/where/glut/library/exists-lglut32-lFGlut32

您可以使用mingw链接器,以便在official page

上找到更多信息