本文主要記錄在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,下面分別介紹着兩種編譯方式。
在這種方式下須要配置的選項以下圖所示(勾選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目錄
使用XCode建立一個C++的Console工程,再Build Phases中的Link Binary下添加編譯好的連接lib,
在Build Settings中的SearchPaths下添加頭文件目錄到Header Search Path
在main.cpp中添加如下到測試代碼:
- #include <osgViewer/Viewer>
- #include <osgDB/ReadFile>
-
-
- int main(int argc, const char * argv[]) {
-
- osgViewer::Viewer viewer;
- viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
- viewer.setUpViewInWindow(200, 200, 800, 600);
- viewer.run();
-
- return 0;
- }
點擊運行,程序會出現兩個連接錯誤,這是因爲OSG工程編譯時候使用的連接庫與XCode所使用的C++庫不一樣所致,修改選項C++爲libstdc++
再次編譯程序,能夠運行正常了,可是提示找不到Plugins插件,這是因爲OSG的osgPlugins插件文件夾並不在程序運行目錄下致使的,須要該目錄設置到程序運行目錄中去。
Framework方式與dylib方式不一樣之處在於使用Framework以後不須要設置 頭文件、連接庫選項,只須要把Framework添加到工程中就能夠編譯使用了,爲了編譯Framework,須要修改一下CMake的配置:
另外example選項一樣建議勾選,配置好以後Generate生成xcode工程,以後用Xcode打開工程並編譯
使用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拷貝到生成的目標文件目錄下都失敗了,緣由暫時還未找到,但願知道的讀者能夠告知一下。但使用如下的代碼能夠加載
- #include <osgDB/ReadFile>
- #include <osgViewer/Viewer>
- #include <osgViewer/ViewerEventHandlers>
-
-
- int main(int argc, char** argv)
- {
- osg::ArgumentParser arguments(&argc,argv);
- osgViewer::Viewer viewer(arguments);
- osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
- viewer.setSceneData( loadedModel.get() );
- viewer.addEventHandler(new osgViewer::StatsHandler);
- viewer.setUpViewInWindow(100, 100, 800, 600);
- return viewer.run();
-
- }
須要在命令行中添加參數:(在工程的 Edit Scheme中設置)
編譯運行程序:
http://blog.csdn.net/csxiaoshui/article/details/46505719xcode