致我踩过的坑!
编译前的准备:
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四个文件添加到工程中,目录结构如下:
(2)预处理设置:C/C++ --> 预处理器 --> 预处理器定义:设置预定义处理
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
(3)设置模块定义文件,链接器 --> 输入 --> 模块定义文件:sqlite3.def
(4)修改模块定义文件:在最后追加sqlite3_unlock_notify
(5)配置类型改为静态库lib
(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进入到源码目录:(这里是因为我配置过一次了)
(3)点击Configure,编译64位,vs2015.然后配置好以下路径:
cmake_install_prefix路径是生成后的库文件都会放在此目录下。然后再次点击configure,无错误后点击generate,也无错误后点击open project,就会打开工程文件,选择需要编译的版本进行编译(debug或release),编译完成后再编译INSTALL就会在刚刚上面配置的cmake_install_prefix的路径下找到库文件了。
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,路径设置同上。至此设置完成,保存文件。
(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
第二步 编译osg3.6.4
1.编译OSG(这里只编译了release版本,所以debug的配置都没有配)
2.把文件解压到以下路径F:\lu_VS\buildOsgearth\buildosg\OpenSceneGraph-OpenSceneGraph-3.6.4
3.打开cmake,进行以下配置。点击configure,会提示报错,然后需要配置依赖路径。
全部像上面配置完(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进行配置:
全部像上面配置完之后再次点击configure,无错,点击generate,最后open project之后像编译osg那样build和install完之后就可以在刚刚配置的路径找到库文件
最后就是配环境变量和测试所有的库是否能使用。