1. 程式人生 > >問題解決——OpenGL超級寶典 第四章 4.5.2 關於freeglut.lib問題的解決過程

問題解決——OpenGL超級寶典 第四章 4.5.2 關於freeglut.lib問題的解決過程

看《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)" (

[email protected]@[email protected])

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)" (

[email protected]@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生成成功,執行正常。

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

至此,本著“看效果”的目的,執行作者程式碼成功。

(我想,我寫的這篇文章應該是最全面詳實的了。)

相關推薦

問題解決——OpenGL超級 4.5.2 關於freeglut.lib問題的解決過程

看《OpenGL超級寶典(第四版)》的4.5.2節時遇到了一系列問題,經過不懈努力終於解決,現將過程記錄在下,以便查詢追思。 在第4.5.2節之前,自己寫的的程式碼都沒有使用作者的gltools.h檔案,而是直接使用的glut.h檔案,且從未出現過問題。 看到4.5.2節

OpenGL超級7版 配置環境&第一個程式

筆者學習OpenGL還沒幾天,就已經快崩潰了。OpenGL配環境真是一個坑,網上教程很多都比較舊了,而針對OpenGL超級寶典第7版的教程幾乎沒有。所以筆者四處碰壁,花了很多時間,終於弄出來一個可行的方法。 要開始OpenGL超級寶典的學習不是用傳統的配環境

OpenGL超級七版學習筆記-緩衝區-在緩衝區中填充及複製資料(buffers)

2017-3-28緩衝區-在緩衝區中填充及複製資料(buffers) 1、  如果你要放入緩衝的資料是不變的值,那麼使用glClearBufferSubData()或者glClearNamedBufferSubData()會更有效率。原型如下: voidglClearBuf

OpenGL超級七版學習筆記-著色器儲存塊(shader storage block)

20170321-shader storage block 1、shader storage block與uniform block最大的區別是在shader中可以對前者進行寫入操作,甚至是對其成員的記憶體進行原子操作,而後者在shader中是隻讀的。shader stor

OpenGL超級七版學習筆記-緩衝區(buffers)(1)

此係列學習筆記來自OpenGL超級寶典第七版英文版自己翻譯而來,此書使用的OpenGL核心的版本是4.5. 2017-3-22緩衝區(buffers) 1、  緩衝區是線性分配儲存的。 2、  緩衝區是由名字表示的,OpenGL本質上是使用名字來辨識緩衝區的。 3、  在你

Python:可複用的函式與模組

模組是一組函式的集合。 def <函式名> (引數列表):       <函式語句>       return <返回值> def ListSum(l): result=0 for i in l: resu

搭建OpenGL超級五版開發環境

轉載自:http://www.zyh1690.org/build-opengl-super-bible-fifth-edition-development-environment/ 我的環境: Win8.1 x64 Visual Studio 2010 SP1

opengl超級五版)閱讀筆記 8 模型檢視投影矩陣

從這裡開始就進入了opengl最關鍵的部分了。 1.構造平移矩陣 m3dTranslationMatrix44(mTranslate, 0.0f, 0.0f, -2.5f); 第一個引數是4x4的矩陣,後面是位移向量 2.構造旋轉矩陣 m3dRotationMatrix44(m

opengl超級五版)閱讀筆記 7 抗鋸齒

在圖形光柵化的時候,難免會出現很多鋸齒現象,如下圖所示: 可以看到很明顯的一段一段的鋸齒。 opengl中通過把該點畫素與周圍畫素相混合來優化鋸齒現象,方法如下: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//設定混合模式

opengl超級五版)閱讀筆記 6 幾何圖形繪製細節

1.剔除背面 如果不剔除物體的背面的話,3D圖形的正面和背面會同時顯示,如下圖所示: 通過glEnable(GL_CULL_FACE);來剔除背面 2.深度測試 通過開啟深度測試,能保證在物體後面的圖形不會被渲染出來,通過glEnable(GL_DEPTH_TEST);開啟 3.三種填充模

opengl超級五版)閱讀筆記 5 混合

這裡只提一種最基本的混合,其他的混合方式可以參考書中的表格 混合程式碼如下: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); shaderManager.UseStockShader(GL

opengl超級五版)閱讀筆記 4 裁剪

通過glScissor(100, 100, 600, 400)函式可以設定裁剪區域,引數分別為左下角和右上角的座標 當然,別忘記要開啟裁剪測試glEnable(GL_SCISSOR_TEST); #include <GLTools.h> // OpenGL toolkit

opengl超級五版)閱讀筆記 3 基本圖元的使用

基本圖元有 GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_LOOP GL_TRIANGLE_FAN. 後面將一 一對其進行簡單的介紹 1.GL_POINTS I. 建立點集 GLfloat v

opengl超級五版)閱讀筆記 1 基本程式框架

配置環境部分其實還是有點煩,網上資料有很多,耐心點問題也不大。 下面也算是opengl的hello world了,寫了比較詳細的註釋。 值得注意的是#pragma comment(lib,“gltools.lib”)這一行,書中是沒有的,可能因為環境配置方法的不同,我必須要手動連結一下glt

VS2012 中完整配置OpenGL超級五版)編譯環境

在接觸OpenGL中,配置顯得相當麻煩,特別是在VS2012下配置時,存在許多問題,而網上的很多方法僅僅適用於VS2008,甚至僅適用於VC6.0,筆者經過自身的實踐,參考了許多網上的資料,總結了一下配置的方法,當然這僅僅是筆者的個人理解,筆者個人水平有限,因此未必是萬能

vs2013 下配置OpenGL超級五版)開發環境

系統環境: win7 64位  , VS2013_DskExp                     vs2013 安裝路徑:E:\vs_e2013 說明:這個環境主要針對 《OpenGL 超級寶典》第五版 書中測試程式碼所以搭建,所以用的 依賴軟體比較老舊 一) 準備軟

OpenGL超級五版) 環境配置

特別提醒:有些在word中或者其他中的程式碼複製到vs中會報錯,原因是word中有些隱含的字元,複製到vs中就會報錯;重新輸一遍就可以解決問題,這裡只是提醒下!  可以參閱我前面轉載的一篇文章,進行比較然後來配置,本人蔘照這兩篇,成執行,算是學習opengl的開始吧;

OpenGL:立體天空和紋理折射、雙紋理(下)

ever oot 可行性 VR char 都是 pipeline 差異 pac 對照了藍寶書,才知道紅寶書的長處。 reflect函數的原理在紅寶書中有說明,僅僅有

04-撩課-Java面試-

31.靜態變數和例項變數的區別? 靜態變數也叫類變數, 這種變數前加了static修飾符。 可以直接用類名呼叫, 也可以用物件呼叫, 而且所有物件的同一個類變數 都是共享同一塊記憶體空間。 例項變數也叫物件變數, 這種變數沒有加static修飾符。 只能通過物件呼叫, 而且所

04-撩課-Python面試-

一. for迴圈和while迴圈中的else代表什麼意思? 當for迴圈和while迴圈順利的遍歷完成時, 就會執行else分支 如果迴圈過程中, 碰到continue, 只要沒有打斷迴圈, 就會繼續執行else 例如: for i in range(1, 11):