MacOS X编译OpenSceneGraph
2015-06-16 11:02
211 查看
本文主要记录在MacOS X上编译OpenSceneGraph,方便日后查阅。所使用的环境如下:
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中添加以下到测试代码:
再次编译程序,可以运行正常了,但是提示找不到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拷贝到生成的目标文件目录下都失败了,原因暂时还未找到,希望知道的读者可以告知一下。但使用以下的代码可以加载
编译运行程序:
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中添加以下到测试代码:
#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方式
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拷贝到生成的目标文件目录下都失败了,原因暂时还未找到,希望知道的读者可以告知一下。但使用以下的代码可以加载
#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中设置)
编译运行程序:
相关文章推荐
- JDK配置 及 tomcat配置
- linux下安装配置nagios监控
- linux系统添加根证书 linux证书信任列表
- log4j.properties配置文件使用
- 如何在Linux下大量屏蔽恶意IP地址(ipset)
- linux 更改mysql密码
- OpenFlow Switch Specification 1.3.0 (一)
- Linux_1.4_应用程序地址布局
- Nginx优化 突破十万并发
- linux系统添加根证书 linux证书信任列表
- linux 安装pnp时出现了一些错误
- 使用AVAudioPlayer播放音频文件
- linux系统相关命令
- Windows/Linux下引用jar包,并用javac/java编译运行
- OpenSceneGraph控制模型
- 分布式查询工具-Apache Drill
- 6月上旬国外最佳主机TOP5:排名及价格无任何变化
- linux命令三:chmod
- 携程事件后,云运维的安全命题何解?
- 大型商贸系统(进货管理)技术解析(一)MVC架构搭建