超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean

公司自己的项目,打算用最新的2.10osgearth,所以折腾一波。。。。。。
前期各种库可直接编译两种,完了osg 直接编译debug release省时间

编译前的准备:

  1. widow7
  2. cmake-3.15.4
  3. vs2015
  4. osg3.6.4
  5. osg-3rdparty(第三方依赖库)
  6. osgearth2.10
  7. gdal3.0.1
  8. proj6.2.0
  9. sqlite3.30
  10. geos3.7.2
  11. OsgQt

第一步 编译gdal3.0.1+proj6.2.0+geos3.7.2+sqlite3.30**

1. 静态编译SQLite库。

因为gdal3.0.1版本必须依赖geos库和sqlite,所以首先得把sqlite库编译完成。到官网下载源码sqlite-amalgamation-3300100.zip和windows运行时的预编译二进制文件sqlite-dll-win64-x64-3300100.zip

创建新的静态库工程,把上面下载的文件解压加入到新空项目:

(1)将sqlite3.c、sqlite3.h、sqlite3ext.h、sqlite3.def四个文件添加到工程中,目录结构如下:

超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第1张图片

(2)预处理设置:C/C++ --> 预处理器 --> 预处理器定义:设置预定义处理
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY 

超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第2张图片

(3)设置模块定义文件,链接器 --> 输入 --> 模块定义文件:sqlite3.def
(4)修改模块定义文件:在最后追加sqlite3_unlock_notify超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第3张图片
(5)配置类型改为静态库lib

超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第4张图片

(6)最后生成解决方案(需要生成debug版时,选择debug,这里以release版为例)

x64\Release文件夹可以看到SQLite3.lib静态库和SQLite3.exe。在SQLite目录中分别创建include和lib和bin文件夹,将刚才生成的.lib文件放入lib文件夹中,将sqlite3.h、sqlite3ext.h放入include中,将sqlite-tools-win32-x86-3280000.zip中的sqlite3.exe放在bin文件夹中以备后用。

2.编译proj

(1)解压文件,放到以下目录中C:\Users\Administrator\Desktop\mypro\proj-6.2.0
(2)打开cmake进入到源码目录:

超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第5张图片

(3)点击Configure,编译64位,vs2015.然后配置好以下路径:超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第6张图片

超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第7张图片
cmake_install_prefix路径是生成后的库文件都会放在此目录下。然后再次点击configure,无错误后点击generate,也无错误后点击open project,就会打开工程文件,选择需要编译的版本进行编译(debug或release),编译完成后再编译INSTALL就会在刚刚上面配置的cmake_install_prefix的路径下找到库文件了。
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第8张图片

3.编译GEOS

Geos目前新的版本是3.7.2,使用VS进行编译(这个如果是编译osgearth2.8的话要使用geos3.5.0,要不然不同版本会出现问题)。
环境VS2015+CMake3.15.6

cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64 (vcvars64的目录)
vcvars64
cd 到geos目录下
autogen.bat
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

DEBUG版本

cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64 (vcvars64的目录)
vcvars64
cd 到geos目录下
autogen.bat
nmake /f makefile.vc DEBUG=1
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

geos 3.5.0
修改配置文件nake.opt
这个配置是debug 还是release不修改就会出现debug用release的lib编译后续出现问题
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第9张图片
x64 ,64位还是32位自己发挥
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第10张图片
根据自己编译器的版本号添加,下边是我的
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第11张图片

4.编译GDAL

gdal3.0.1
(1)把压缩包解压到
		 E:\mypro
(2)进入文件夹找到nmake.opt文件,打开。

第41行左右,找到MSVC_VER=设置为1900(VS2015版本应该为1900及以上,视自己编译器而定)。

第57行左右找到GDAL_HOME =将生成文件的路径设置成你想要的位置。

第194行左右找到WIN64=YES,如果生成64位版本取消注释本行。

第218行左右找到DLLBUILD=设置为1启动动态编译、 0为静态编译。这里一定一定要是动态编译!因为osg依赖于动态生成的gdal_i.lib,静态编译生成的好像没有带i结尾的库,这也是我最后编完之后但是无法使用osg或osgearth调用gdal的原因,因为一开始我编译的是静态的。

第238行左右,找到PROJ_INCLUDE PROJ_LIBRARY,分别设置成你刚才生成PROJ时的include和lib文件夹(其中PROJ_INCLUDE的-I后为地址),并将.lib的名称改对。

第613行左右,找到GEOS_DIR,分别设置成你刚才生成GEOS时的include和lib文件夹,并将.lib的名称改对。

第509行左右,找到SQLITE_INC SQLITE_LIB,路径设置同上。至此设置完成,保存文件。
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第12张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第13张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第14张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第15张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第16张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第17张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第18张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第19张图片

(3)执行release编译,打开

vs x64 命令行

进入到源码文件夹,输入以下命令进行release版本编译,如果要进行debug版本就在下面命令makefile.vc后面加上DEBUG=1。

(如:nmake /f makefile.vc DEBUG=1)
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

遇到的问题
win7 VS2015编译GDAL 正在创建库 gdal_i.lib 和对象 gdal_i.exp时候报错:LINK : error LNK2001: 无法解析的外部符号 _OSRValidate

5. 编译osg

(1)数据准备

OpenSceneGraph-3.6.4,OSG的源码包。
osg-3rdparty-cmake-master.zip,源码包依赖的第三方库。
OpenSceneGraph-Data-3.4.0.zip,自带的一些数据资源文件。
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第20张图片

(2)osg-3rdparty(第三方依赖库)

蛋碎一地,只有2015没有预建包。。。自己cmake了只能。。。。
下载
在VS2015下官方并没有提供编译好的包,只能自己编译,这一步如果有已经编译好的第三方库则可以跳过。建议没库编译经验的同学用其他VS版本跳过这一步,或者找已经编译好的版本(本文最后提供已经编译好的版本)。
解压下载好的第三方库包osg-3rdparty-cmake-master,就会发现里面有个download_dependencies.bat,用记事本打开:
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第21张图片
也就是说第三方库源代码需要通过这个批处理文件来获取,最后会下载到C:\3rdparty这个文件夹(不想下载可以从本文最后处地址获取)。里面有三个cmd不识别的命令:git、curl以及7z。

Git:

可以参考《Git安装教程(windows)》来安装git;

CURL:

下载curl
下载后设置curl.exe所在目录的环境变量
然后cmd中测试

curl --help
7z:

可以安装7-Zip
下载后设置curl.exe所在目录的环境变量
然后cmd中测试

都安装好以后,将download_dependencies.bat加载cmd里面运行,等待下载完成就可以了,注意在cmd里面检查批处理命令的输出结果。
下载完成以后,打开cmake,填入source目录以及build目录,点击configure,选择VS2015-64位编译器,configure完成后,按照如下配置进行再次configure,直到没有红色高亮显示
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第22张图片
点击Generate生成VS工程,用VS2015打开,生成解决方案,等待编译完成就可以了。编译完成后单独生成INSTALL工程,编译结果就会自动安装到CMAKE_INSTALL_PREFIX设置的文件夹。

(3) CURL 编译

编译之前要编译好zlib 和openssl
CURL下载
使用vs2015命令行
debug

nmake /f Makefile.vc mode=dll vc=12 MACHINE=x64 WITH_SSL=dll DEBUG=yes WITH_ZLIB=dll SSL_PATH=E:\OpenSSL-Win64 ZLIB_PATH=E:\mypro\release\3rdParty

release

nmake /f Makefile.vc mode=dll vc=12 MACHINE=x64 WITH_SSL=dll DEBUG=no WITH_ZLIB=dll SSL_PATH=E:\OpenSSL-Win64 ZLIB_PATH=E:\mypro\release\3rdParty

中途可能确实openssl的相关依赖,可以选择编译或者使用编译好的包

(4) OSG 3.6.4

解压源码包,文件夹重命名为OpenSceneGraph-3.6.3。启动cmake,填入源代码路径和编译路径,点击Configure,界面就会出现一些编译选项。

全部像上面配置完(gdal库一定要像白线那样配置为gdal_i.lib)之后再次点击configure,无错,点击generate,最后open project之后像编译proj4那样build和install完之后就可以在刚刚配置的路径找到库文件。
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第23张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第24张图片
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第25张图片
在这里插入图片描述
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第26张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第27张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全部像上面配置完(gdal库一定要像白线那样配置为gdal_i.lib)之后再次点击configure,无错,点击generate,最后open project之后像编译proj4那样build和install完之后就可以在刚刚配置的路径找到库文件。
生成目录下的bin,还有Lib文件,我生成的时候找不到osgPlugins-3.4.1这个lib文件夹,如果没有找一下吧

6. OSGEarth 2.10

基本跟OSG差不多,解压然后用Cmake进行编译
设置相关路径,2.10去掉了osgEarthQt模块所以要重新编译。
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第28张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里GEOS我是编译路径设置错了,所以后续修正了,白色的在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第29张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
osgEarthSilverLining、osgEarthTriton编译
这个提前下载sundog官网的sdk安装选择路径即可
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第30张图片

osgEarthQt编译

2.10删除了osgEarthQt模块因此要自己编译
osgearth/src/osgEarthQt/CMakeList.txt 需要对照旧版本的更改(我是直接暴力粘贴过去)
https://github.com/gwaldron/osgearth/blob/2.8/src/osgEarthQt/CMakeLists.txt
osgearth/src/CMakeList.txt需要对照旧版本的更改(这个就是增加osgEarthQt的lib)
https://github.com/gwaldron/osgearth/blob/2.8/src/CMakeLists.txt
CMakeModules文件夹文件FindOsgEarth.cmake 文件增加下面的配置

FIND_OSG_LIBRARY( OSGQT_LIBRARY osgQt )
FIND_OSG_LIBRARY( OSGQT_LIBRARY_DEBUG osgQtd )

然后勾选项目选项
打开文件进行正常编译即可,缺失的自动补全

7. OSGQt

osg3.6以后去除了osgqt,所以要分开编译,如果3.6以下不含3.6则使用我下班的方法添加osgqt的编译
使用工具:qt cmake当然要准备好
下载源码
前提osg3.6已经编译完成,使用cmake之前要修改一下Cmakelist.txt的
新加

SET(DESIRED_QT_VERSION "5.8.0" CACHE STRING "")   
SET(CMAKE_PREFIX_PATH "E:\\Qt\\Qt5.8.0\\5.8\\msvc2015_64" CACHE PATH "")

在这里插入图片描述
在这里插入图片描述
然后开config
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置好以后generate openproject 然后就是vs2015编译了
ALL_BUILD INSTALL 完成

8. OSGOcean

OSGOcean是基于osg开发用来做水效果的
下载地址

(1)准备快速傅里叶变化算法库

我选择FFTW[下载地址]http://www.fftw.org/install/windows.html)

解压之后,启动vs命令行,并切换到解压目录:
然后运行以下三个命令

lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def

然后会在目录中生成.h文件.lib文件,这也是编译时要连接的文件;

(2)编译osgOcean

首先采用上面用cmake生成osg工程的步骤产生osgOcean工程:
osg链接就不用说了,设置好就行了
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第31张图片
我选择的是FFTW3勾上
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第32张图片
正常configure
generate open project
vs2015打开以后正常ALL_BUILD
设置oceanExample为启动项目
把oceanExample设置为启动工程,把工作路径设置为exe所在目录:
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第33张图片
启动的时候没有找到Lib dll 自己设置一下就完了
启动可看到效果

遇到的问题:

1.普通的lnk2019的问题就不说了,一般都是include库设置不对。。。能编译的都是有点基础的,直接排插就完了
2.nvcore/nvcore.h: No such file or directory,memory.h错误找不到nvcore/nvcore.h

这个需要重新编译nvtt:下载nvtt
然后cmake编译一下,方法同上不需解释了
可以直接在 E:\mypro\nvidia-texture-tools\project\vc12 目录下找到对应的vs版本,启动后生成解决方案
然后在指定的文件夹可以找到对应的文件
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第34张图片

3.OSG3.40 编译时,无法打开输入文件“optimized.lib”

解决方案:

正常情况下,下图中会多出一项:ZLIB_LIBRARY_RELEASE,之后屡次编译,都提示“无法打开输入文件“optimized.lib””

因为ZLIB_LIBRARY就相当于是ZLIB_LIBRARY_RELEASE,而配置过ZLIB_LIBRARY_RELEASE后会忽略ZLIB_LIBRARY,

实际上,起作用的是ZLIB_LIBRARY,所以会发生错误“无法打开输入文件“optimized.lib””
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第35张图片

测试方法:

创建一个vs项目,指定osg的include lib 目录,还有工作目录
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第36张图片
在这里插入图片描述
附加依赖项:

OpenThreadsd.lib
osgViewerd.lib
opengl32.lib
glu32.lib
osgd.lib
osgDBd.lib
osgFXd.lib
osgGAd.lib
osgManipulatord.lib
osgParticled.lib
osgShadowd.lib
osgSimd.lib
osgTerraind.lib
osgTextd.lib
osgUtild.lib
osgWidgetd.lib
//main.cpp

#include 
#include 

#include 
#include 

using namespace std;

int main()
{	
	//这里修改成OSG数据包里面的实例数据
	string osgPath = "D:\\Work\\OSGBuild\\OpenSceneGraph-Data\\cow.osg";

	osgViewer::Viewer viewer;
	osg::Node * node = new osg::Node;	
	node = osgDB::readNodeFile(osgPath);
	viewer.setSceneData(node);
	return viewer.run();
}

超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第37张图片
编译启动:
超级详细的osgearth2.10+vs2015+osg3.6.4+OsgQt+gdal3.0.1+geos3.7.2+proj6.2+OSGOcean_第38张图片

本文参考:https://blog.csdn.net/After_April/article/details/102520644
https://blog.csdn.net/charlee44/article/details/86761461#2_10
https://blog.csdn.net/LISA_SMITH/article/details/94739101

你可能感兴趣的:(C++)