MacOS X編譯OpenSceneGraph

本文主要記錄在MacOS X上編譯OpenSceneGraph,方便往後查閱。所使用的環境以下:c++

 

  • MacOS X 10.10 Yosemite
  • XCode 6.3.2
  • CMake 3.3.0
  • OpenSceneGraph-3.2.1
從OSG官網下載源碼,解壓到任一目錄,打開CMake軟件,將CMakeLists.txt拖拽到CMake軟件中,點擊Configure,在彈出的界面中選擇XCode,出現以下的配置界面:
 
接下來須要進行一些配置以便能更好的使用osg
 

  • 編譯模式
在MacOS X上使用OSG編譯的庫能夠有兩種方式,第一種方式是使用相似於在Windows中Visual Studio的開發模式,編譯成dylib,第二種方式是使用Apple特有的開發方式,將OSG編譯爲Framework,下面分別介紹着兩種編譯方式。

  • Dylib的方式
在這種方式下須要配置的選項以下圖所示(勾選Groupd和Advanced)
 
 
首先在BUILD選單下勾選EXAMPLES,不管是那種方式的編譯OSG提供的示例程序都是學習OSG不可或缺的一部分,接下來在OSG選單中選擇一下一些選項:
 
在這個選單下須要將OSG_WINDOWS_SYSTEM修改成Cocoa,默認的Carbon界面在MacOS X中已經Deprecated,其餘選項默認就能夠了,配置完成以後點擊Generate生成XCode的工程,使用Xcode打開工程並編譯,會彈出Autocreate Schemes的提示,選擇Automatically就能夠,接下來編譯ALL_BUILD目標,等待一段時間編譯完成。而後咱們須要切換到Release模式下編譯,點擊比阿提籃的ALL_BUILD目標,一直往下移動鼠標到Edit Scheme,切換到Release後再編譯:
 
 
 
當編譯好以後能夠再OSG的目錄下找到編譯好的bin目錄和lib目錄
 

  • Dylib方式
使用XCode建立一個C++的Console工程,再Build Phases中的Link Binary下添加編譯好的連接lib,
 
在Build Settings中的SearchPaths下添加頭文件目錄到Header Search Path
 
 
在main.cpp中添加如下到測試代碼:
 
[cpp]  view plain  copy
 
  1. #include <osgViewer/Viewer>  
  2. #include <osgDB/ReadFile>  
  3.   
  4.   
  5. int main(int argc, const char * argv[]) {  
  6.   
  7.     osgViewer::Viewer viewer;  
  8.     viewer.setSceneData(osgDB::readNodeFile("glider.osg"));  
  9.     viewer.setUpViewInWindow(200, 200, 800, 600);  
  10.     viewer.run();  
  11.       
  12.     return 0;  
  13. }  
點擊運行,程序會出現兩個連接錯誤,這是因爲OSG工程編譯時候使用的連接庫與XCode所使用的C++庫不一樣所致,修改選項C++爲libstdc++

 
再次編譯程序,能夠運行正常了,可是提示找不到Plugins插件,這是因爲OSG的osgPlugins插件文件夾並不在程序運行目錄下致使的,須要該目錄設置到程序運行目錄中去。
 

  • Framework方式
Framework方式與dylib方式不一樣之處在於使用Framework以後不須要設置 頭文件、連接庫選項,只須要把Framework添加到工程中就能夠編譯使用了,爲了編譯Framework,須要修改一下CMake的配置:
 
另外example選項一樣建議勾選,配置好以後Generate生成xcode工程,以後用Xcode打開工程並編譯
 

  • Framework的使用
使用Framework只須要在建立的xcode工程中的Build Phases中添加須要引用的Framework便可(咱們能夠右鍵點擊framework文件,打開包中的內容能夠看到不少頭文件以及其餘的一些資源等,framework只是將全部內容封裝打包到一塊兒)
 

  • 備註
1.編譯工程中須要修改連接到c++庫爲libstdc++,xcode默認創建的C++工程的連接庫和osg不同
2.編譯osg開發包的過程當中能夠編譯Install工程,它除了編譯所有工程外還會把編譯好的lib和bin文件拷貝到  /usr/local目錄下(該目錄是隱藏文件夾)
3.xcode項目中能夠拖拽連接庫文件或者framework文件到Link Binary With Libraries中,所以若是咱們使用  /usr/local目錄中文件時,能夠先在Finder中打開它(使用Command+Shift +G 跳轉到該目錄位置並拖拽到項目中)
4. TODO???:加載osgPlugins目前暫時加載不上,嘗試過添加OSG_LIBRARY_PATH、在代碼中添加addLibraryLists、將osgPlugins-3.2.1拷貝到生成的目標文件目錄下都失敗了,緣由暫時還未找到,但願知道的讀者能夠告知一下。但使用如下的代碼能夠加載
[cpp]  view plain  copy
 
  1. #include <osgDB/ReadFile>  
  2. #include <osgViewer/Viewer>  
  3. #include <osgViewer/ViewerEventHandlers>  
  4.   
  5.   
  6. int main(int argc, char** argv)  
  7. {  
  8.     osg::ArgumentParser arguments(&argc,argv);  
  9.     osgViewer::Viewer viewer(arguments);  
  10.     osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);  
  11.     viewer.setSceneData( loadedModel.get() );  
  12.     viewer.addEventHandler(new osgViewer::StatsHandler);  
  13.     viewer.setUpViewInWindow(100, 100, 800, 600);  
  14.     return viewer.run();  
  15.       
  16. }  
須要在命令行中添加參數:(在工程的 Edit Scheme中設置)


 
編譯運行程序:

http://blog.csdn.net/csxiaoshui/article/details/46505719xcode

相關文章
相關標籤/搜索