看《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生成成功,運行正常。
-----------------------------------------------------------------
至此,本著“看效果”的目的,運行作者代碼成功。
(我想,我寫的這篇文章應該是最全面詳實的了。)
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com