接上一則: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 個 ==========
2、方法二:
另一種方法是,省略VS的設置,這時需要把lib文件夾下的所有lib文件直接拷貝到工程文件夾下的源文件夾中(即cpp所在文件夾)去。