VS2012中使用CEGUI專案釋出到XP平臺的問題
接著上一篇文章,詳細說說如何把一個帶CEGUI的專案釋出到XP平臺。
這個問題糾纏了我好幾天。這裡把詳細解決思路記下來。有同樣問題的朋友可以少走很多彎路。
核心方法就一句話。“你專案使用的所有外部依賴庫都用/MT編譯。”
1.準備。
首先你要具備如下工具:CEGUI原始碼;FreeType原始碼;Pcre原始碼;CMake工具。我會在下文說明原因。
各個開源庫的版本號,請參考你的CEGUI引用的各自的標頭檔案分別下載。
FreeType開源庫主頁:http://sourceforge.net/projects/freetype/?source=dlp
Pcre開源庫主頁:http://sourceforge.net/projects/pcre/?source=dlp
Pcre原始碼編譯指南:http://tunps.com/cmake-pcrecpp
CMake工具主頁:http://cmake.org/cmake/resources/software.html
2.編譯CEGUI
請參考我的上一篇部落格:http://blog.csdn.net/lsldd/article/details/8821063,編譯CEGUI。注意,每個子專案都要配置好。
編譯完成後,你會發現一大堆Link衝突錯誤和警告,大概如下:
1>freetype.lib(ftbase.obj) : warning LNK4217: locally defined symbol _strrchr imported in function _raccess_make_file_name
1>pcre.lib(pcre_exec.obj) : warning LNK4049: locally defined symbol _memmove imported
1>freetype.lib(smooth.obj) : error LNK2001: unresolved external symbol __imp__longjmp
仔細觀察錯誤,主要是FreeType導致的。原因是CEGUIBase這個工程中引入瞭如下幾個庫:
Winmm.lib,freetype.lib,pcre.lib,zlib.lib
因此我們猜想,這裡的freetype是用/MD編譯的!這就是罪魁禍首!必須自己用/MT編譯原始碼!
Pcre導致很多警告,我這裡以防萬一也自己編譯了;
ZLib也有1,2個警告,但是替換它就坑爹了,因為CEGUI把ZLib拷貝了部分原始碼(unZip部分)到自己工程,又修改了部分原始碼(主要是吧C風格改成C++),因此我沒有替換ZLib,結果表明不影響。
3.編譯依賴庫
同樣參考釋出到XP的標準步驟,分別編譯FreeType原始碼;Pcre原始碼。然後把lib放入CEGUI的dependencies\lib目錄下。
注意。lib目錄下還有2個目錄,由於我們把CEGUI編譯為DLL,所以,請放在dependencies\lib\dynamic目錄下。
然後編譯CEGUI。這裡由於CEGUI已經在上一步編譯過,這一步只是LinK,所以重新Link的時間很短。
Link後仍然會出現一堆庫衝突錯誤。典型的如下:
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
這就是因為工程中同時存在/MT與/MD的依賴,必須砍掉一個。由於我們要釋出到XP必須使用/MT,因此,請忽略掉MSVCRT.lib,方法是:
【工程屬性】-【連結】-【輸入】-【忽略指定依賴項】,輸入MSVCRT.lib。
這樣支援釋出到XP的CEGUI就準備好了。
4.配好你的專案
對一個簡單的CEGUI程式而言,需要用到如下DLL:
CEGUIBase.dll,CEGUIOpenGLRenderer.dll,CEGUIExpatParser.dll,CEGUISILLYImageCodec.dll,CEGUIFalagardWRBase.dll ,SILLY.dll
可能還需要部分C執行時庫,比如msvcp100.dll之類。請自行準備,沒有可以去別的系統上COPY或者下載。
隨時注意看CEGUI.Log檔案,看哪個DLL載入失敗。要麼是找不到,要麼是沒有使用/MT編譯。
把CEGUI編譯的相應的Lib連結如你的工程專案。
同時,把【工程屬性】-【連結】-【優化】裡的第一項和第二項優化開關都開啟。
同樣用釋出到XP的標準步驟,編譯好你的工程。
現在應該沒有問題了。
相關文章
- Vue專案釋出到springboot中的系列配置VueSpring Boot
- war包不能釋出到websphere的問題Web
- 專案打包釋出到tomcat中,中文出現亂碼Tomcat
- 從零使用TypeScript開發專案打包釋出到npm上TypeScriptNPM
- Blazor釋出到IIS中頁面一片空白的問題Blazor
- testin 雲測平臺使用問題
- 一鍵釋出多平臺自媒體,把內容釋出到多個自媒體平臺
- linux平臺上rmi使用的問題Linux
- 如何利用Typora編寫部落格,快速釋出到多平臺?
- 將自己的開源專案釋出到 Maven 中央倉庫Maven
- 【專案中遇到的zookeeper的問題】
- 實際專案中遇到的問題
- IT專案管理中的原則問題專案管理
- 影片一鍵釋出到多個平臺,給你節省時間
- 系統跟新後,VS2012不能新建專案,也不能載入專案問題的解決方法
- vue專案中遇到的問題總結Vue
- 專案接單平臺
- 將專案自動化釋出到多臺windows伺服器上的工具有嗎?哪個好?Windows伺服器
- 使用idea建立springboot專案並打成war包釋出到weblogic上IdeaSpring BootWeb
- 專案中常問的問題
- J2EE平臺中間層的效能問題
- 小程式專案中的一些小問題
- 【SSM】WEB專案中的中文亂碼問題SSMWeb
- 推行專案管理中存在的主要問題(轉)專案管理
- 手把手教你如何將專案釋出到Maven中央倉庫Maven
- 求助taomcat5.5無法顯示釋出到webapps中的專案無法顯示其檔案WebAPP
- 基於java的專案管理平臺Java專案管理
- 專案問題
- 專案中遇到的RediS快取問題及面試問題總結Redis快取面試
- 如何使用Photino建立Blazor專案進行跨平臺Blazor
- 應用跨平臺問題?
- Windows XP 去掉“自定義通知”中的無用專案(轉)Windows
- 專案管理中的關鍵問題有哪些「上篇」專案管理
- 專案管理中的關鍵問題有哪些「下篇」專案管理
- 專案中遇到的一些問題小結
- 專案管理過程中的問題分析方法(轉)專案管理
- 打造專屬測試平臺4-使用Docker部署Django專案DockerDjango
- 專案管理中的人力資源問題專案管理