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

相关文章
相关标签/搜索