osg环境部署 OSG3.6.5+vs2017+win10_x64


该编译方法适用于vs2017和vs2019

一、环境准备

1、配置环境

		vs2017
		cmake 3.26.0

安装cmake参考: https://blog.csdn.net/u011231598/article/details/80338941

2、OSG相关准备

源码:OpenSceneGraph-OpenSceneGraph-3.6.5
依赖:3rdParty_VS2017_v141_x64_V11_full
数据:OpenSceneGraph-Data-3.4.0

osg官网地址: https://www.openscenegraph.com/index.php/download-section
在这里插入图片描述
源码我选择了官网的最新版本,大多数教程选择的3.4.1
依赖:必须选择vs2017对应版本
在这里插入图片描述
数据:我选择了3.4.0
在这里插入图片描述

在这里插入图片描述

二、使用cmake进行构建

1、文件目录

将数据解压放到D盘中,文件目录如下:(文件夹名字我做了修改)
在这里插入图片描述

其中3rdParty做如下修改:将x64文件夹中的内容往前提一级
在这里插入图片描述

2、使用cmake进行构建

2.1 准备

打开cmake-gui
将OpenSceneGraph中的cmakelists.txt拖入到cmkae中

请添加图片描述
修改路径开始构建
请添加图片描述

请添加图片描述
Finish完成后会出现红色的提示。

2.2 (可跳过)移除nvtt相关模块

这一步可以先跳过,如果之后的批运行(第三章)nvtt报错的话可以执行这一步!

破案了,我试了3.6.5和3.4.1 2个版本,发现3.4.1会报这个错,更换3.6.5是可以正常使用的

下面的解决方法暂时不删了,算是一个解决思路吧,目前仍然解决不了3.4.1中nvtt的问题。以后有时间解决了再来改回答

在之后的批生成过程中,我的nvtt相关模块始终报错,而且找不到解决方案,
一个大佬说nvtt已经没有必要再用了,直接修改cmkae中的相关内容
报错内容大概如下:

------ 已启动生成: 项目: Plugins nvtt, 配置: Release x64 ------
1>Building Custom Rule E:/OSG/OpenSceneGraph/src/osgPlugins/nvtt/CMakeLists.txt
NVTTImageProcessor.cpp
nvtt.lib(CompressionOptions.obj) : 找到 MSIL .netmodule 或使用 /GL 编译的模块;正在使用 /LTCG 重新启动链接;将 /LTCG 添加到链接命令行以改进链接器性能
nvtt.lib(CompressionOptions.obj) : error LNK2001: 无法解析的外部符号 "int __cdecl nvAbort(char const *,char const *,int,char const *,char const *,...)" (?nvAbort@@YAHPEBD0H00ZZ)
nvtt.lib(CompressionOptions.obj) : error LNK2001: 无法解析的外部符号 "unsigned int __cdecl nv::findD3D9Format(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int)" (?findD3D9Format@nv@@YAIIIIII@Z)
nvtt.lib(CompressionOptions.obj) : error LNK2001: 无法解析的外部符号 "private: void __cdecl nv::String::setString(char const *)" (?setString@String@nv@@AEAAXPEBD@Z)

我的修改方法如下,找到nvtt,然后都设置为remove。
请添加图片描述

2.3 第二次Configure

第一次Configure会出现红色的提示,做如下修改:

ACTUAL_3RDPARTY_DIR 修改路径
BUILD_OSG_EXAMPLES 打勾
CMAKE_INSTALL_PREFIX 修改路径

请添加图片描述

2.4 第三次Configure

第二次configure完成后,还有红色提示,操作如下:

对最上面的 BUILD_MFC_EXAMPLE 那个打勾,然后继续configure

请添加图片描述

2.5 生成

红色全部消失!
请添加图片描述
generate完成。
请添加图片描述
这次可以打开vs开始编译生成了。
两种打开方式:

点击Open Project
或者
D:\OSG\OpenSceneGraph\build中打开OpenSceneGraph.sln

三、使用vs2017开始批生成

1 、批生成

请添加图片描述
请添加图片描述
这一步时间很久,4小时左右。

2、对报错进行修改(没有报错跳过这步!)

请添加图片描述
我主要遇到3种错误

2.1 nvtt报错

这一步看第二章的2.2

2.2 无法打开包括文件: “afxwin.h”

------ 已启动生成: 项目: Examples osgviewerMFC, 配置: Release x64 ------
1>Building Custom Rule E:/OSG/OpenSceneGraph/examples/osgviewerMFC/CMakeLists.txt
MFC_OSG_MDI.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MFC_OSG_MDIDoc.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MFC_OSG_MDIView.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
stdafx.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MFC_OSG.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MainFrm.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
ChildFrm.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
正在生成代码...
已完成生成项目“example_osgviewerMFC.vcxproj”的操作 - 失败。
------ 已启动生成: 项目: Examples osgviewerMFC, 配置: Debug x64 ------

------ 已启动生成: 项目: Examples osgviewerMFC, 配置: Debug x64 ------
1>Building Custom Rule E:/OSG/OpenSceneGraph/examples/osgviewerMFC/CMakeLists.txt
MFC_OSG_MDI.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MFC_OSG_MDIDoc.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MFC_OSG_MDIView.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
stdafx.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MFC_OSG.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
MainFrm.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
ChildFrm.cpp
e:\osg\openscenegraph\examples\osgviewermfc\stdafx.h(38): fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory
正在生成代码...
已完成生成项目“example_osgviewerMFC.vcxproj”的操作 - 失败。
------ 已启动生成: 项目: Examples osgvirtualprogram, 配置: Release x64 ------

解决办法:vs缺少MFC组件
在这里插入图片描述
如果使用的是vs2019,工具包名字不同,但是关键字是MFC X86 X64就可以哦!
参考: https://blog.csdn.net/bailang_zhizun/article/details/120992244

2.3 “example_osgviewerMFC.vcxproj”的操作 - 失败。

报错内容大致如下:

------ 已启动生成: 项目: Examples osgviewerMFC, 配置: Release x64 ------
MFC_OSG_MDI.cpp
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\atlwinverapi.h(710): error C3861: “LCMapStringEx”: 找不到标识符
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxwin.h(2108): error C3646: “m_pConfigs”: 未知重写说明符
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxwin.h(2108): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxwin.h(2029): error C2065: “GC_PAN_WITH_GUTTER”: 未声明的标识符

正在生成代码...
已完成生成项目“example_osgviewerMFC.vcxproj”的操作 - 失败。
------ 已启动生成: 项目: Examples osgviewerMFC, 配置: Debug x64 ------
MFC_OSG_MDI.cpp
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\atlwinverapi.h(710): error C3861: “LCMapStringEx”: 找不到标识符
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxwin.h(2108): error C3646: “m_pConfigs”: 未知重写说明符
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxwin.h(2108): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\afxwin.h(3048): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
正在生成代码...
已完成生成项目“example_osgviewerMFC.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 2 个,最新 552 个,跳过 0 个 ==========


注:错误信息只截取了部分
解决:

两处:
0501 改为 0A00

请添加图片描述

请添加图片描述
再次运行:请添加图片描述
参考: https://blog.csdn.net/bailang_zhizun/article/details/120992244

3、install

批生成没有问题后就可以安装了
请添加图片描述

四、添加环境变量

0、打开环境变量

打开此电脑,右键点击属性,进入高级设置,进入环境变量
在这里插入图片描述

1、追加path的环境变量

系统变量里,找到path,添加3个环境变量,分别为:

D:\OSG\OpenSceneGraph\bin
D:\OSG\OpenSceneGraph\build\bin
D:\OSG\3rdParty\bin

在这里插入图片描述

2、添加环境变量:

在用户环境变量中,添加:

变量名:OSG_FILE_PATH
变量值:D:\OSG\OpenSceneGraph-Data

在这里插入图片描述

五、测试

1、命令行测试

打开cmd命令行:
输入

  • osgversion
  • osglogo
  • osgviewer cow.osg
    在这里插入图片描述

2、代码测试

新建一个c++控制台项目。
打开项目属性

2.1 更改配置

顶部配置改为: Debug x64

2.2 包含目录

VC++目录—>包含目录:D:\OSG\OpenSceneGraph\include

2.3 库目录

VC++目录—>库目录:D:\OSG\OpenSceneGraph\lib

在这里插入图片描述

2.4预处理器

C/C+±----->预处理器 ---->预处理器定义 ----->添加:WIN32

在这里插入图片描述

2.5 附加依赖项

连接器 ----->输入 ----->附加依赖项:
OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgUtild.lib
osgGAd.lib
osgViewerd.lib
osgTextd.lib

在这里插入图片描述

2.5 修改x64

我这里顶部默认是x86,include引用会报红,需要改为x64
在这里插入图片描述

2.6 添加代码

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>

int main(int argc, char **argv)
{
    
    
	osgViewer::Viewer viewer;
	viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
	return viewer.run();
}

2.7 测试运行

ctrl+F5
在这里插入图片描述
参考: https://blog.csdn.net/u013719339/article/details/78415685
参考: https://blog.csdn.net/fx_odyssey/article/details/117848102

补充:有的代码需要加头文件

#include “stdafx.h”

但是我这里会报红。
一种解决办法是用以下两个头文件来代替:

#include <stdio.h>
#include <tchar.h>

猜你喜欢

转载自blog.csdn.net/qq_43718758/article/details/129486298
今日推荐