本文是基于VS2013+OpenSceneGraph3.6.0进行编译。
1. 安装包和工具准备:
如果需要生成帮助文档,则需要多下载两个软件:
说明:
(1) OSG源码:OpenSceneGraph-3.6.0,这里使用的是官网稳定版本3.6.0
(2) 第三方依赖库:3rdParty,这里使用的是VS2013_x64版本,选择和VS对应版本即可
(3) CMAKE:cmake-3.15.6,这里使用的是3.15.6版本
(4) OSG数据:OpenSceneGraph-Data,这里使用的是3.4.0版本
(5) doxygen:用于生成CHM格式的帮助文档
(6) graphviz:图像可视化软件,用于生成类与类之间的关系图
2. CMake配置和生成.sln:
ACTUAL_3RDPARTY_DIR:第三方依赖库的位置,默认的一般是错误的,填写3rdParty所在的路径
BUILD_DOCUMENTATION:是否构建相关文档,可勾选上
BUILD_MFC_EXAMPLE:是否构建osg的MFC实例代码,可根据自己需要勾选
BUILD_OSG_APPLICATION:是否编译OSG的可执行文件,里面包含了osgarchive,osgconv,osgversion,osgviewer
BUILD_OSG_EXAMPLE:是否编译OSG的默认例子,建议勾选,对前期学习很大帮助
BUILD_OSG_PLUGINS:是否编译OSG插件,勾选上
CMAKE_INCLUDE_PATH:包含文件目录,可以不指定,编译完成后复制
CMAKE_INSTALL_PREFIX:cmake安装目录,这里选择了源码目录下,即C:/OSG/OpenSceneGraph-OpenSceneGraph-3.6
CMAKE_LIBRARY_PATH:库文件目录,可以不指定,编译完成后复制
DXYOGEN_DOT_EXECUTABLE:用于生成帮助文档的osg的类的关系图,目录设定为Graphviz目录下dot.exe的位置,如:D:/Program Files (x86)/Graphviz2.38/bin/dot.exe
DXYOGEN_EXECUTABLE:用于生成CHM帮助文档,目录设置为dxyogen目录下doxygen.exe的位置,如:D:/Program Files/doxygen/bin/doxygen.exe
其余配置按默认选项即可
点击Generate生成,等待完成
3. 打开VS2013,打开构建好的sln项目文件(CMake的输出路径)下,点击生成-批生成,勾选ALL_BUILD的Debug和Release版本,点击确定。整个过程持续4-5小时(6年前的小破本编译的)
4. 如果编译失败,则检查原因,这里列举我遇到的两个问题:
(1)缺少unistd.h文件
#ifndef _UNISTD_H
#define _UNISTD_H
#include
#include
#endif /* _UNISTD_H */
(2)osgviewerMFC编译不成功
#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0x0501
#endif
#ifndef WINVER
#define WINVER 0x0A00 // 修改此处
#endif
#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0x0A00 // 修改此处
#endif
Minimum system required |
Macros to define |
Win8 |
_WIN32_WINNT>=0x0602 WINVER>=0x0602 |
Win7 |
_WIN32_WINNT>=0x0601 WINVER>=0x0601 |
Windows Server 2008 R2 |
_WIN32_WINNT>=0x0601 WINVER>=0x0601 |
Windows Server 2008 |
_WIN32_WINNT>=0x0600 WINVER>=0x0600 |
Windows Vista |
_WIN32_WINNT>=0x0600 WINVER>=0x0600 |
Windows Server 2003 |
_WIN32_WINNT>=0x0502 WINVER>=0x0502 |
Windows XP |
_WIN32_WINNT>=0x0501 WINVER>=0x0501 |
Windows 2000 |
_WIN32_WINNT>=0x0500 WINVER>=0x0500 |
Windows NT 4.0 |
_WIN32_WINNT>=0x0400 WINVER>=0x0400 |
Windows Me |
_WIN32_WINDOWS=0x0500 WINVER>=0x0500 |
Windows 98 |
_WIN32_WINDOWS>=0x0410 WINVER>=0x0410 |
Windows 95 |
_WIN32_WINDOWS>=0x0400 WINVER>=0x0400 |
第一个问题是因为附加依赖项加了个莫名其妙的路径,可能是在各种折磨的时候加进去的,删除即可解决
第二个问题是因为缺少了mfc120.lib的文件,在osgviewerMFC项目中添加库目录即可(项目-属性-VC++目录-库目录)
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\amd64;
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\;
如果以上目录下没有这两个文件,则安装Multibyte MFC Library for Visual Studio 2013。
解决以后再次批生成,完美解决。
5. 再次选择批生成,这次勾选INSTALL
6. 生成目录合并
将构建目录Build下的bin,include和lib拷贝到osg源码下对应的位置,也可以把两个目录下的bin,include和lib都拷贝到单独的文件夹里面。
7. 配置环境变量:
将bin目录所在的路径添加到PATH环境变量中:
新建系统变量,变量名为:OSG_FILE_PATH,变量值为osg数据所在路径
在命令行(CMD)中输入命令 osgversion,osglogo,osgviewer cow.osg进行测试,如果成功表示环境配置成功,如果提示缺少zlib.dll,则需要在第三方依赖库3rdParty中把相应的文件拷贝到bin目录下
8. 编写第一个osg程序
添加包含目录:配置属性-VC++目录-包含目录,即最后拷贝好的include目录
添加库目录:配置属性-VC++目录-库目录,即最后拷贝好的lib目录
添加依赖库:配置属性-链接器-附加依赖项,输入以下链接库(其中带d为Debug版本,要一一对应)
编写简单的测试代码进行测试,如果成功表示配置环境成功:
#include "stdafx.h"
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
viewer.realize();
viewer.run();
return 0;
}
如果出现外部符号无法解析,原因可能是:
(1)开发平台不是64位的
(2)依赖项未添加
(3)包含头文件未添加
(4)库目录未添加
所有操作都可以在工程项目中,右键属性中完成