1. 程式人生 > >Win64下編譯OSG詳細過程(Win10+VS2015+OSG3.6.3)

Win64下編譯OSG詳細過程(Win10+VS2015+OSG3.6.3)

新建 art osg 類庫 動態庫 查找 測試環境 lease ring

目錄

  • 1. 數據資源準備
  • 2. 編譯第三方庫
  • 3. 編譯GDAL
  • 4. 編譯OSG
    • 1) CMAKE_INSTALL_PREFIX:
    • 2) BUILD_OSG_EXAMPLES/BUILD_MFC_ EXAMPLE:
    • 3) ACTUAL_3RDPARTY_DIR
    • 4) BUILD_DOCUMENTATION
    • 5) 編譯過程的問題
    • 6) 安裝
  • 5. 測試環境
  • 6. 資源下載
  • 7. 參考文獻

1. 數據資源準備

在OSG官方網站上下載最新的源碼包。一般要求下載三個包:

  1. OpenSceneGraph-3.6.3,OSG的源碼包。
  2. osg-3rdparty-cmake-master.zip,源碼包依賴的第三方庫。
  3. OpenSceneGraph-Data-3.4.0.zip,自帶的一些數據資源文件。

技術分享圖片

同時還需要提前安裝好VisualStudio環境,我這裏用的VS2015;以及cmake,用來生成VS工程,我這裏用的最新的cmake3.13.3。

2. 編譯第三方庫

在VS2015下官方並沒有提供編譯好的包,只能自己編譯,這一步如果有已經編譯好的第三方庫則可以跳過。建議沒庫編譯經驗的同學用其他VS版本跳過這一步,或者找已經編譯好的版本(本文最後提供已經編譯好的版本)。

解壓下載好的第三方庫包osg-3rdparty-cmake-master,就會發現裏面有個download_dependencies.bat,用記事本打開:

技術分享圖片

也就是說第三方庫源代碼需要通過這個批處理文件來獲取,最後會下載到C:\3rdparty這個文件夾(不想下載可以從本文最後處地址獲取)。裏面有三個cmd不識別的命令:git、curl以及7z。可以參考《Git安裝教程(windows)》來安裝git;參考《windows(64位)下使用curl安裝》來安裝curl;至於7z可以安裝7-Zip。

都安裝好以後,將download_dependencies.bat加載cmd裏面運行,等待下載完成就可以了,註意在cmd裏面檢查批處理命令的輸出結果。

下載完成以後,打開cmake,填入source目錄以及build目錄,點擊configure,選擇VS2015-64位編譯器,configure完成後,按照如下配置進行再次configure,直到沒有紅色高亮顯示。

技術分享圖片

點擊Generate生成VS工程,用VS2015打開,生成解決方案,等待編譯完成就可以了。編譯完成後單獨生成INSTALL工程,編譯結果就會自動安裝到CMAKE_INSTALL_PREFIX設置的文件夾。

3. 編譯GDAL

可參看我的另外一篇文章《Win64下編譯集成GEOS和Proj4的GDAL》。建議不熟悉GDAL的同學直接找編譯好的版本就可以了。或者直接略過,GDAL應該只是可選的編譯項之一。

4. 編譯OSG

解壓源碼包,文件夾重命名為OpenSceneGraph-3.6.3。啟動cmake,填入源代碼路徑和編譯路徑,點擊Configure,界面就會出現一些編譯選項。

技術分享圖片

之前很多資料說多Configure幾次,cmake會把有問題的地方紅色高亮顯示。但是到我這裏最後紅色高亮卻消失了,只是會提示找不到對應的類庫。以防萬一我還是將這些依賴庫一一配置進去了。註意配置以下幾個選項:

1) CMAKE_INSTALL_PREFIX:

cmake得到的工程都有install工程,生成之後就會自動把需要的頭文件、lib還有dll復制到對應的目錄中去,這樣方便我們管理。可以把這裏設置成一個我們想要的目錄,我這裏設置的是D:\Work\OSGBuild\OpenSceneGraph-3.6.3\install。

2) BUILD_OSG_EXAMPLES/BUILD_MFC_ EXAMPLE:

這兩個都是OSG的示例,可以勾選編譯進去方便以後學習。

3) ACTUAL_3RDPARTY_DIR

這裏設置成第三方庫的路徑,我這裏設置成上面編譯好的第三方庫安裝路徑:D:\Work\OSGBuild\osg-3rdparty-cmake-master\install。當然這裏也可以是下載的已經編譯好的第三方路徑。

設置好這三項,再次Configure。第三方庫有9個:zlib、libpng、libjpeg、libtiff、FreeType、GLUT、GIFLIB、MINIZIP、curl,再加上一個GDAL。仔細看輸出,如果存在庫沒找到,則會提示對應的庫Could NOT find。

技術分享圖片

如果一旦發現沒找到對應的庫,可以回頭找對應的配置項。勾選Grouped和Advanced可以方便查找,以下是我自己配置的路徑。

技術分享圖片

仔細看就會知道萬變不離其宗,簡單來說就是include找頭文件,library找.lib,debug找debug的.lib,release找release的.lib。

4) BUILD_DOCUMENTATION

勾選這個,可以生成編譯OSG幫助文檔的工程,可參照這篇文章《VS2010+64+OSG3.2.1之一幫助文檔的生成》。註意這篇文章的第三個設置好像沒必要了,可以直接生成chm。

5) 編譯過程的問題

修改以上配置Configure沒有問題之後,點擊Generate,就可以生成工程文件。用VS2015打開工程,生成解決方案,剩下的就是漫長的等待了。編譯完成之後有個osgviewerMFC生成錯誤:

技術分享圖片

在網上查找解決方案,原因是VS2015已經不支持太遠古的VC了。在這個項目的stdafx.h文件中,找到WINVER和_WIN32_WINNT的宏定義,修改為

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER                // Allow use of features specific to Windows XP or later.
#define WINVER 0x0601        // Change this to the appropriate value to target other versions of Windows.
#endif

#ifndef _WIN32_WINNT        // Allow use of features specific to Windows XP or later.                   
#define _WIN32_WINNT 0x0601    // Change this to the appropriate value to target other versions of Windows.
#endif      

也就是將0x501修改為0x0601,這段的含義也就是指定需要win7及以上版本的windows來運行。

再次生成解決方案,編譯就沒有問題了。

6) 安裝

分別僅單獨生成doc_openscenegraph和doc_openthreads,就會生成幫助文檔。僅單獨生成INSTALL,OSG的所有依賴、文檔就會發送到CMAKE_INSTALL_PREFIX設置的目錄中。最後目錄中的結果:

技術分享圖片

5. 測試環境

看了很多資料基本上都是在安裝絕對環境,好處是配置好了本機哪裏都可以通過文件名調用,不過壞處是一旦存在相同的dll環境或者換了電腦就麻煩了。我這裏習慣配置相對環境,只要拷貝好代碼,在任何電腦都可以直接使用,不用費心再配置一次。

如下圖所示,建立文件夾:

技術分享圖片

將我們剛剛編譯的OSG的dll拷貝到bin/bin_D目錄裏面,帶_D的表示是debug版本,註意第三方庫的dll也應該拷貝進去。include文件夾就是OSG安裝的include文件夾,裏面是OSG的頭文件。lib/lib_D則放入OSG的lib文件。HelloOSG就是我們用VS2015新建的空白win32控制臺工程。

在新建main.cpp文件,編寫下面代碼:

//main.cpp

#include <iostream>
#include <Windows.h>

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>

using namespace std;

int main()
{   
    //這裏修改成OSG數據包裏面的實例數據
    string osgPath = "D:\\Work\\OSGBuild\\OpenSceneGraph-Data\\cow.osg";

    osgViewer::Viewer viewer;
    osg::Node * node = new osg::Node;   
    node = osgDB::readNodeFile(osgPath);
    viewer.setSceneData(node);
    return viewer.run();
}

在工程屬性中,按照如下設置:

  1. 指定頭文件文件夾
    技術分享圖片
  2. 指定lib文件夾
    技術分享圖片
  3. 指定lib文件
    技術分享圖片
  4. 指定dll的文件夾
    技術分享圖片

大家可以配置一個選項然後編譯運行試試,就可以體會到程序具體是如何使用C/C++動態庫的。註意debug設置debug目錄,release設置release目錄。由於我這裏都是設置的相對目錄,即使換了電腦仍然可以使用。最後運行的結果:

技術分享圖片

6. 資源下載

全套的編譯資源(包含編譯的chm幫助)都已經上傳到網盤:https://share.weiyun.com/5IX142y ,密碼:q3blnx。

技術分享圖片

其中第一個文件夾內就是第2節提到的bat命令下載的第三方源碼。所有的動態庫都是VS2015-64位編譯的,包含了debug和release兩套dll。

7. 參考文獻

  1. OSG環境搭建(OSG3.6.2+VS2017+Qt5.10.1)
  2. VS2015+OSG3.6.1編譯問題
  3. OSG3.4.0+VS2010+WIN10編譯及二次開發環境搭建
  4. VS2010+64+OSG3.2.1之一幫助文檔的生成

Win64下編譯OSG詳細過程(Win10+VS2015+OSG3.6.3)