【學習ARToolkit小記之五】 解決“error LNK2019: 無法解析的外部符號 ___glutCreateWindowWithExit@8”錯誤

接上一則:ARToolkit(4):ARToolkit開發原則(Development Principles)(http://blog.csdn.net/qingyang8513/article/details/45332635


一、開發環境

1、操作系統:Windows 7(64位)

2、編程環境:Microsoft Visual Studio 2010

3、ARToolkit版本:ARToolKit-2.72.1


二、問題來源

在配置好ARToolkit環境並運行測試程序、熟悉了ARToolkit開發原則之後,下一步便是開發自己的ARToolkit程序,官網教程可以參考下面的連接:Documentation --- > Developing your First Application, Part 1(http://www.hitl.washington.edu/artoolkit/documentation/devstartup.htm),我們將在下一則學習中根據本人的學習過程總結開發過程。

這裏的錯誤即是在使用ARToolkit工具創建自己的工程,並將ARToolKit\examples\simple\simpleTest.c中的程序拷貝到自己建立的工程文件ARFirstApplicatiion.cpp中,點擊“生成 ---> 生成解決方案”時出現的錯誤信息,提示如下:

錯誤信息如下:

1>  ARFirstApplication.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\ar\ar.h : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\ar\ar.h : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\ar\ar.h : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\ar\ar.h : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失
1>LINK : warning LNK4098: 默認庫“LIBCMT”與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
1>libARgsub.lib(gsub.obj) : error LNK2019: 無法解析的外部符號 ___glutCreateWindowWithExit@8,該符號在函數 _glutCreateWindow_ATEXIT_HACK@4 中被引用
1>G:\Learning\ARToolkit Learning\ARFirstApplication\Debug\ARFirstApplication.exe : fatal error LNK1120: 1 個無法解析的外部命令
1>
1>生成失敗。
1>
1>已用時間 00:00:01.54
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========

前提:已經設置好ARToolkit開發環境(包括DSVL、OpenVRML、OpenGL等)


三、解決方法

在網上直接搜索error LNK2019: 無法解析的外部符號 ___glutCreateWindowWithExit@8,該符號在函數 _glutCreateWindow_ATEXIT_HACK@4 中被引用,可以搜索到好多內容,但是這些解決方法都是針對OpenGL的,按照設置方法任然無法解決,經過兩天的摸索,最終找到了解決方法。首先羅列一下OpenGL的解決方法,然後再總結適用於ARToolkit的解決方法。

0、OpenGL關於此問題的解決方法:

1)在#inlcude<glut.h>之前加上#define GLUT_DISABLE_ATEXIT_HACK;

2)工程屬性->配置(設爲‘所有配置’)->配置屬性->C/C++->預處理器定義(設爲‘GLUT_BUILDING_LIB’);

3)工程屬性->配置(設爲‘活動(Debug)’)->鏈接器->系統->子系統(設爲‘控制檯(/SUBSYSTEM:CONSOLE)’

參考如下:a)http://www.xuebuyuan.com/773056.html

                            b)http://blog.csdn.net/bill_ming/article/details/8150111


1、方法一:

1)將ARToolKit文件夾下lib文件夾拷貝到工程文件夾下的源文件夾中(即cpp所在文件夾);

2)同樣的方法將ARToolKit\bin文件夾下的Data和Wrl兩個文件夾也拷貝到工程文件夾下的源文件夾中,如圖1所示;


圖1  添加lib、Data、Wrl文件夾

3)VS2010設置:解決方視圖中,右鍵點擊工程,選擇屬性,彈出工程屬性頁,在“配置屬性 --- 連接器 --- 常規 --- 附加庫目錄”,將剛剛複製到源文件夾下的lib目錄添加到附加庫目錄中,如圖2所示:


圖2  添加lib目錄到附加庫目錄

4)重新生成解決方案即可;

1>FinalizeBuildStatus:
1>  正在刪除文件“Debug\ARFirstApplication.unsuccessfulbuild”。
1>  正在對“Debug\ARFirstApplication.lastbuildstate”執行 Touch 任務。
1>
1>生成成功。
1>
1>已用時間 00:00:01.43
========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========


5)點擊運行進行測試,如果需要在Debug文件夾下直接運行exe文件,則同樣需要將lib文件夾、Data文件夾和Wrl文件夾同時拷貝到Debug文件夾下(即和exe文件在同一個文件夾下)即可。

2、方法二:

另一種方法是,省略VS的設置,這時需要把lib文件夾下的所有lib文件直接拷貝到工程文件夾下的源文件夾中(即cpp所在文件夾)去。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章