本文主要记录在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,下面分别介绍着两种编译方式。
  • 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中添加以下到测试代码:
 
  1. #include <osgViewer/Viewer>
  2. #include <osgDB/ReadFile>
  3. int main(int argc, const char * argv[]) {
  4. osgViewer::Viewer viewer;
  5. viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
  6. viewer.setUpViewInWindow(200, 200, 800, 600);
  7. viewer.run();
  8. return 0;
  9. }

点击运行,程序会出现两个链接错误,这是由于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拷贝到生成的目标文件目录下都失败了,原因暂时还未找到,希望知道的读者可以告知一下。但使用以下的代码可以加载
  1. #include <osgDB/ReadFile>
  2. #include <osgViewer/Viewer>
  3. #include <osgViewer/ViewerEventHandlers>
  4. int main(int argc, char** argv)
  5. {
  6. osg::ArgumentParser arguments(&argc,argv);
  7. osgViewer::Viewer viewer(arguments);
  8. osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
  9. viewer.setSceneData( loadedModel.get() );
  10. viewer.addEventHandler(new osgViewer::StatsHandler);
  11. viewer.setUpViewInWindow(100, 100, 800, 600);
  12. return viewer.run();
  13. }

需要在命令行中添加参数:(在工程的 Edit Scheme中设置)

 
编译运行程序:

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

MacOS X编译OpenSceneGraph的更多相关文章

  1. 【Java】macOS下编译JDK8

    安装mercurial brew install mercurial 下载源码 1234 hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-sour ...

  2. 在Windows和MacOS下编译Lua

    官方说明: http://www.lua.org/manual/5.3/readme.html 在Windows下编译Lua动态链接库的注意事项: 1. 创建一个空的DLL项目: 2. 将src文件夹 ...

  3. 在 MacOS 上编译链接 OpenGL 程序

    几个星期以前开始折腾在我的MBA上写 OpenGL 小程序.我不太熟悉MacOS上的开发工具比如XCode,所以一开始的想法就是用vim来写程序,然后手工编译链接.网上查了一下,MacOS上的Open ...

  4. macOS 上编译 Dynamips

    Dynamips 是一个Cisco 路由器模拟软件. 安装过程: git clone git://github.com/GNS3/dynamips.git cd dynamips mkdir buil ...

  5. Macos系统编译percona及部分函数在Macos系统上运算差异

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文来源:原创投稿 GreatSQL社区原创内容未经授权不得随意使用,转载请联系 ...

  6. 如何让thrift0.9.2 在macos上面编译通过?

    为将来跨语言通信预研,选择了thrift来试试.结果在mac os上面安装遇到种种困难,不知道是我选择方法错误还是咋的,不管怎样,总算是编译过去了. 首先,我们来参考官网的安装步骤:https://t ...

  7. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  8. OpenSceneGraph 编译 error LNK2019:unresolved external symbol 错误

    在编译 OpenSceneGraph 的一个简单示例时, #include <osgViewer/Viewer> #include <osgDB/ReadFile> void ...

  9. OpenSceneGraph学习笔记

    VirtualPlanetBuilder编译方法 转自:http://www.boyunjian.com/do/article/snapshot.do?uid=7327932418831703800 ...

随机推荐

  1. Windows完成端口与Linux epoll技术简介(能看懂)

    WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点3.完成端口(Completion Ports )相关数据结构和创建4.完成端口线程的工作原理5.Windows完成端口的实例代码 ...

  2. android开发之微信支付功能的实现

    移动开发中,支付类的App越来越多,对于开发者来说也是不可少的,不可不会的:下面就来说一说支付开发的流程 1.申请你的AppID 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该 ...

  3. vultr的80端口?

    1.查看防火墙版本号firewall-cmd --version2.查看防火墙状态firewall-cmd --state3.添加80端口的权限firewall-cmd --zone=public - ...

  4. Android高度仿新浪微博引导页面

    在写这一篇文章之前,先向大家推荐一篇博文:http://blog.csdn.net/dawanganban/article/details/17297671 感谢这位博主,我在该博主的基础上完成了对新 ...

  5. 初探python+selenium

    由于公司网络管管控严格,服务器上访问外网需要进行身份认证(按理说递交个申请给开放相关域名外网访问就好,无奈不给通过,又想马儿跑又不给马吃草),正好前一阵撸课程的时候看到selenium可以实现自动化, ...

  6. APP压力測试新手教程

    Daniel Knott 用过各种不同编程语言和软件质量保证工具.他在软件开发和測试方面干了七年,自2010年,他一直在德国汉堡的XING AG公司就职,几个项目里,比方XING调查和XING建议,他 ...

  7. mysql安装出现应用程序无法正常启动(oxc000007b)的解决方案

    原文:mysql安装出现应用程序无法正常启动(oxc000007b)的解决方案 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/IUNIQUE/art ...

  8. ASP.NET Page执行顺序(ASP.NET生命周期)

    此部分说明的生命周期只有部分: ---引用MSDN 阶段 说明 页请求 页请求发生在页生命周期开始之前.用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在 ...

  9. iOS8的APP过渡过程

    1. 2. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluX3hpYW53ZWk=/font/5a6L5L2T/fontsize/400/fill/ ...

  10. C ++ 17 技术上已经完成,C ++ 20 也在路上(有路线图)

    在前不久结束的冬季 ISO C ++标准会议(Kona)上,C ++ 17 宣布在技术上已完成,仅剩下一些 ISO 相关的繁文缛节,即将提交至最终的 ISO 投票表决.该会议由 Plum Hall 和 ...