欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

问题解决OpenGL超级宝典 第四章 4.5.2 关于freeglut.lib问题

程序员文章站 2022-05-18 11:00:21
...

看《OpenGL超级宝典(第四版)》的4.5.2节时遇到了一系列问题,经过不懈努力终于解决,现将过程记录在下,以便查找追思。 在第4.5.2节之前,自己写的的代码都没有使用作者的gltools.h文件,而是直接使用的glut.h文件,且从未出现过问题。 看到4.5.2节时,本

看《OpenGL超级宝典(第四版)》的4.5.2节时遇到了一系列问题,经过不懈努力终于解决,现将过程记录在下,以便查找追思。


在第4.5.2节之前,自己写的的代码都没有使用作者的gltools.h文件,而是直接使用的glut.h文件,且从未出现过问题。

看到4.5.2节时,本来想先看看运行效果,于是复制运行了作者的代码,结果遇到了问题:

11>LINK : fatal error LNK1104: 无法打开文件“freeglut.lib”

解决方法:

(1)下载freeglut-2.8.1.tar.gz压缩包并解压。

(2)将freeglut-2.8.1\freeglut-2.8.1\include\GL文件夹下的freeglut.h、freeglut_ext.h、freeglut_std.h、glut.h文件复制到C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl文件夹下。(初次配置OpenGL环境后,C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl文件夹下会有一个glut.h文件,将它改个名字屏蔽掉,防止覆盖,例如“glut.h-”)

(3)将freeglut-2.8.1\freeglut-2.8.1\lib\x86文件夹下的freeglut.dll文件复制到C:\Windows\System32文件夹下。

(4)将freeglut-2.8.1\freeglut-2.8.1\lib\x86文件夹下的freeglut.lib、freeglut_static.lib文件复制到C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib文件夹下。

按F7生成后出现另外的问题:

21>MainOfTempCode.obj : error LNK2001: 无法解析的外部符号 "void __cdecl m3dRotationMatrix44(float * const,float,float,float,float)" (?m3dRotationMatrix44@@YAXQAMMMMM@Z)

1>D:\WLSCode\TempCode\Debug\TempCode.exe : fatal error LNK1120: 1 个无法解析的外部命令

解决方法:

添加shared文件夹下的math3d.cpp到工程中。

再次F7生成后又出现一个问题:

31>Link:
1> freeglut_static.lib(freeglut_display.obj) : 找到 MSIL .netmodule 或使用 /GL 编译的模块;正在使用 /LTCG 重新启动链接;将 /LTCG 添加到链接命令行以改进链接器性能
1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/LTCG”规范)
1>libcmt.lib(crt0dat.obj) : error LNK2005: __initterm_e 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(crt0dat.obj) : error LNK2005: __exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(crt0dat.obj) : error LNK2005: __cexit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(crt0dat.obj) : error LNK2005: __amsg_exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_a 已经在 MSVCRTD.lib(cinitexe.obj) 中定义
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_z 已经在 MSVCRTD.lib(cinitexe.obj) 中定义
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_a 已经在 MSVCRTD.lib(cinitexe.obj) 中定义
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_z 已经在 MSVCRTD.lib(cinitexe.obj) 中定义
1>libcmt.lib(crt0.obj) : error LNK2005: _mainCRTStartup 已经在 MSVCRTD.lib(crtexe.obj) 中定义
1>libcmt.lib(errmode.obj) : error LNK2005: ___set_app_type 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(mlock.obj) : error LNK2005: __unlock 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(mlock.obj) : error LNK2005: __lock 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(winxfltr.obj) : error LNK2005: __XcptFilter 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmt.lib(setlocal.obj) : error LNK2005: __configthreadlocale 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: 默认库“libcmt.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>D:\WLSCode\TempCode\Debug\TempCode.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>
1>生成失败。

解决方法:

屏蔽gltools.h文件夹下的“#define FREEGLUT_STATIC”一行。

最后F7生成成功,运行正常。


-----------------------------------------------------------------

至此,本着“看效果”的目的,运行作者代码成功。

(我想,我写的这篇文章应该是最全面详实的了。)