日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OSG源码编译

發布時間:2024/1/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OSG源码编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是基于VS2013+OpenSceneGraph3.6.0進行編譯。

1. 安裝包和工具準備:

如果需要生成幫助文檔,則需要多下載兩個軟件:?

說明:

(1) OSG源碼:OpenSceneGraph-3.6.0,這里使用的是官網穩定版本3.6.0

(2) 第三方依賴庫:3rdParty,這里使用的是VS2013_x64版本,選擇和VS對應版本即可

(3) CMAKE:cmake-3.15.6,這里使用的是3.15.6版本

(4) OSG數據:OpenSceneGraph-Data,這里使用的是3.4.0版本

(5) doxygen:用于生成CHM格式的幫助文檔

(6) graphviz:圖像可視化軟件,用于生成類與類之間的關系圖

?

2.?CMake配置和生成.sln:

  • 設定源路徑和構建路徑,其中源路徑選擇OSG源碼路徑,構建路徑放在源碼路徑新建的Build文件夾下(名字可自己定義),如圖所示:

?

  • 選擇之后,勾選Advanced,配置構建項。需要設置的地方如下,其余可根據自己需要進行設置:

ACTUAL_3RDPARTY_DIR:第三方依賴庫的位置,默認的一般是錯誤的,填寫3rdParty所在的路徑

BUILD_DOCUMENTATION:是否構建相關文檔,可勾選上

BUILD_MFC_EXAMPLE:是否構建osg的MFC實例代碼,可根據自己需要勾選

BUILD_OSG_APPLICATION:是否編譯OSG的可執行文件,里面包含了osgarchive,osgconv,osgversion,osgviewer

BUILD_OSG_EXAMPLE:是否編譯OSG的默認例子,建議勾選,對前期學習很大幫助

BUILD_OSG_PLUGINS:是否編譯OSG插件,勾選上

CMAKE_INCLUDE_PATH:包含文件目錄,可以不指定,編譯完成后復制

CMAKE_INSTALL_PREFIX:cmake安裝目錄,這里選擇了源碼目錄下,即C:/OSG/OpenSceneGraph-OpenSceneGraph-3.6

CMAKE_LIBRARY_PATH:庫文件目錄,可以不指定,編譯完成后復制

DXYOGEN_DOT_EXECUTABLE:用于生成幫助文檔的osg的類的關系圖,目錄設定為Graphviz目錄下dot.exe的位置,如:D:/Program Files (x86)/Graphviz2.38/bin/dot.exe

DXYOGEN_EXECUTABLE:用于生成CHM幫助文檔,目錄設置為dxyogen目錄下doxygen.exe的位置,如:D:/Program Files/doxygen/bin/doxygen.exe

其余配置按默認選項即可

  • 配置完后點擊Configure,如果有問題則修改報錯的配置
  • 點擊Generate生成,等待完成

3.? 打開VS2013,打開構建好的sln項目文件(CMake的輸出路徑)下,點擊生成-批生成,勾選ALL_BUILD的Debug和Release版本,點擊確定。整個過程持續4-5小時(6年前的小破本編譯的)

4.?如果編譯失敗,則檢查原因,這里列舉我遇到的兩個問題:

(1)缺少unistd.h文件

  • 編譯完成之后報了很多無法打開../../../osgdb.lib的錯誤信息,選擇其中一個項目進行重新編譯,發現是缺少了unistd.h文件,導致所有鏈接庫都生成失敗。
  • 在Linux下開發的程序都會有unistd.h這個文件,作用類似于windows下的windows.h的頭文件,而VC沒有這個文件,這時候只需要在第三方依賴庫所在的目錄下的include文件夾下,手動添加進去即可。unistd.h的內容如下:
#ifndef _UNISTD_H#define _UNISTD_H #include <io.h> #include <process.h>#endif /* _UNISTD_H */

(2)osgviewerMFC編譯不成功

  • 如果在cmake階段勾選了OSG_MFC_EXAMPLE,就會報出一堆宏定義未定義的問題。

?

  • 經過檢查發現,這些宏定義都在WinUser.h中有聲明,但是在WINVER>=0x0601才會生效(即Windows Server 2008 R2系統以上才生效),而osgviewerMFC的WINVER版本是0x0501(stdafx.h),屬于XP系統版本,所以是由于版本不兼容導致的問題
#ifndef WINVER #define WINVER 0x0501 #endif #ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0501 #endif
  • ?檢查osgviewerMFC的預編譯定義(項目-屬性-C/C++-預編譯定義)中,發現該項目是定義為0x0A00(Win10)

?

  • ?這時候我們只需要把WINVER修改為0x0A00即可,保證版本統一
#ifndef WINVER #define WINVER 0x0A00 // 修改此處#endif#ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0A00 // 修改此處#endif
  • 附上:Window各個版本對應的宏值

Minimum system required

Macros to define

Win8

_WIN32_WINNT>=0x0602?

WINVER>=0x0602

Win7

_WIN32_WINNT>=0x0601?

WINVER>=0x0601

Windows Server 2008 R2

_WIN32_WINNT>=0x0601?

WINVER>=0x0601

Windows Server 2008

_WIN32_WINNT>=0x0600?

WINVER>=0x0600

Windows Vista

_WIN32_WINNT>=0x0600?

WINVER>=0x0600

Windows Server 2003

_WIN32_WINNT>=0x0502?

WINVER>=0x0502

Windows XP

_WIN32_WINNT>=0x0501?

WINVER>=0x0501

Windows 2000

_WIN32_WINNT>=0x0500?

WINVER>=0x0500

Windows NT 4.0

_WIN32_WINNT>=0x0400?

WINVER>=0x0400

Windows Me

_WIN32_WINDOWS=0x0500?

WINVER>=0x0500

Windows 98

_WIN32_WINDOWS>=0x0410?

WINVER>=0x0410

Windows 95

_WIN32_WINDOWS>=0x0400?

WINVER>=0x0400

  • 然后又報新的錯誤:

第一個問題是因為附加依賴項加了個莫名其妙的路徑,可能是在各種折磨的時候加進去的,刪除即可解決

第二個問題是因為缺少了mfc120.lib的文件,在osgviewerMFC項目中添加庫目錄即可(項目-屬性-VC++目錄-庫目錄)

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\amd64;

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\;

如果以上目錄下沒有這兩個文件,則安裝Multibyte MFC Library for Visual Studio 2013。

解決以后再次批生成,完美解決。

?

5.?再次選擇批生成,這次勾選INSTALL

6.?生成目錄合并

將構建目錄Build下的bin,include和lib拷貝到osg源碼下對應的位置,也可以把兩個目錄下的bin,include和lib都拷貝到單獨的文件夾里面。

7.?配置環境變量:

  • 將bin目錄所在的路徑添加到PATH環境變量中:

  • 新建系統變量,變量名為:OSG_FILE_PATH,變量值為osg數據所在路徑

  • 在命令行(CMD)中輸入命令 osgversion,osglogo,osgviewer cow.osg進行測試,如果成功表示環境配置成功,如果提示缺少zlib.dll,則需要在第三方依賴庫3rdParty中把相應的文件拷貝到bin目錄下

?

8. 編寫第一個osg程序

  • 新建一個win32控制臺程序:

  • 添加包含目錄:配置屬性-VC++目錄-包含目錄,即最后拷貝好的include目錄

  • 添加庫目錄:配置屬性-VC++目錄-庫目錄,即最后拷貝好的lib目錄

  • 添加依賴庫:配置屬性-鏈接器-附加依賴項,輸入以下鏈接庫(其中帶d為Debug版本,要一一對應)

  • 編寫簡單的測試代碼進行測試,如果成功表示配置環境成功:

#include "stdafx.h"#include <osgDB/ReadFile>#include <osgViewer/Viewer>int _tmain(int argc, _TCHAR* argv[]){osgViewer::Viewer viewer;viewer.setSceneData(osgDB::readNodeFile("glider.osg"));viewer.realize();viewer.run();return 0;}

?

如果出現外部符號無法解析,原因可能是:

(1)開發平臺不是64位的

(2)依賴項未添加

(3)包含頭文件未添加

(4)庫目錄未添加

所有操作都可以在工程項目中,右鍵屬性中完成

總結

以上是生活随笔為你收集整理的OSG源码编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。