从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)

致我踩过的坑!

 

编译前的准备:

1.widow10

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

 

第一步 编译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四个文件添加到工程中,目录结构如下:

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第1张图片

(2)预处理设置:C/C++ --> 预处理器 --> 预处理器定义:设置预定义处理

_USRDLL

SQLITE_ENABLE_RTREE

SQLITE_ENABLE_COLUMN_METADATA

SQLITE_ENABLE_FTS5

SQLITE_ENABLE_UNLOCK_NOTIFY 

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第2张图片

(3)设置模块定义文件,链接器 --> 输入 --> 模块定义文件:sqlite3.def

(4)修改模块定义文件:在最后追加sqlite3_unlock_notify

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第3张图片

(5)配置类型改为静态库lib

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第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)解压文件,放到以下目录中F:\lu_VS\buildOsgearth\buildgdal\proj-6.2.0

(2)打开cmake进入到源码目录:(这里是因为我配置过一次了)

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第5张图片

(3)点击Configure,编译64位,vs2015.然后配置好以下路径:

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第6张图片

cmake_install_prefix路径是生成后的库文件都会放在此目录下。然后再次点击configure,无错误后点击generate,也无错误后点击open project,就会打开工程文件,选择需要编译的版本进行编译(debug或release),编译完成后再编译INSTALL就会在刚刚上面配置的cmake_install_prefix的路径下找到库文件了。

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第7张图片

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第8张图片

 

3.编译GDAL

(1)把压缩包解压到F:\lu_VS\buildOsgearth\buildgdal\gdal-3.0.1

(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,路径设置同上。至此设置完成,保存文件。

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第9张图片

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第10张图片

(3)执行release编译,打开

进入到源码文件夹,输入以下命令进行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

编译完之后就可以在刚刚填的路径找到库文件。从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第11张图片

 

 

 

 

 

第二步 编译osg3.6.4

1.编译OSG(这里只编译了release版本,所以debug的配置都没有配)

2.把文件解压到以下路径F:\lu_VS\buildOsgearth\buildosg\OpenSceneGraph-OpenSceneGraph-3.6.4

3.打开cmake,进行以下配置。点击configure,会提示报错,然后需要配置依赖路径。

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第12张图片

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第13张图片

全部像上面配置完(gdal库一定要像白线那样配置为gdal_i.lib)之后再次点击configure,无错,点击generate,最后open project之后像编译proj4那样build和install完之后就可以在刚刚配置的路径找到库文件。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第三步 编译osgearth2.10

1.编译OSGEARTH(操作基本上和编译osg完成一样)

2.把文件解压到F:\lu_VS\buildOsgearth\gwaldron-osgearth

3.打开cmake进行配置:

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第14张图片

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第15张图片

从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2)_第16张图片

全部像上面配置完之后再次点击configure,无错,点击generate,最后open project之后像编译osg那样build和install完之后就可以在刚刚配置的路径找到库文件

 

最后就是配环境变量和测试所有的库是否能使用。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(从头编译osgearth(osgearth2.10+vs2015+osg3.6.4+gdal3.0.1+geos3.7.2+proj6.2))