⑴ 使用nmake编译Gdal源代码(Win10+VS2022)
为了编译Gdal-master的源码,需要PROJ的支持,而PROJ又需要SQLite的支持。
SQLite、PROJ、Gdal-master的源码及编译可参见网页:
https://www.toutiao.com/a7063703225425199623/?log_from=fe233e3892be3_1644664643652
也可使用nmake在命令行创建(参考网页 https://trac.osgeo.org/gdal/wiki/BuildingOnWindows )
使用命令行,进入VS2022开发者命令行窗口
cd D:ProgramsMicrosoft Visual
D:
vcvars64.bat
cd D:SourceCodesgdal-master
set BINDIR=d:programsgdalgdal-bin
set DATADIR=d:programsgdalgdal-data
set INCDIR=d:programsgdalgdal-include
set LIBDIR=d:programsgdalgdal-lib
修改文件“nmake.opt”的内容:
(1)将
#PROJ_INCLUDE = -Id:install-projlocalinclude
改为
PROJ_INCLUDE = -ID:My3rdPartyinclude
(2)将
#PROJ_LIBRARY = d:install-projlocallibproj_6_0.lib shell32.lib ole32.lib
改为
PROJ_LIBRARY = D:My3rdPartylibproj.lib shell32.lib ole32.lib
依次使用下列命令, 创建x64的Release版本
nmake -f makefile.vc MSVC_VER=1930 WIN64=1
nmake /f makefile.vc install MSVC_VER=1930 WIN64=yes
nmake /f makefile.vc devinstall MSVC_VER=1930 WIN64=yes
执行完毕后,目录“d:programsgdal”中的内容如下(使用命令 “tree /f d:programsgdal” 列出)
D:PROGRAMSGDAL
gdal-bin
gdal303.dll
gdaladdo.exe
gdalbuildvrt.exe
gdaldem.exe
gdalenhance.exe
gdalinfo.exe
gdallocationinfo.exe
gdalmanage.exe
gdalmdiminfo.exe
gdalmdimtranslate.exe
gdalsrsinfo.exe
gdaltindex.exe
gdaltransform.exe
gdalwarp.exe
gdal_contour.exe
gdal_create.exe
gdal_grid.exe
gdal_rasterize.exe
gdal_translate.exe
gdal_viewshed.exe
gnmanalyse.exe
gnmmanage.exe
nearblack.exe
ogr2ogr.exe
ogrinfo.exe
ogrlineref.exe
ogrtindex.exe
gdalplugins
drivers.ini
gdal-data
bag_template.xml
cubewerx_extra.wkt
default.rsc
ecw_cs.wkt
eedaconf.json
epsg.wkt
esri_StatePlane_extra.wkt
gdalicon.png
GDALLogoBW.svg
GDALLogoColor.svg
GDALLogoGS.svg
gdalmdiminfo_output.schema.json
gdalvrt.xsd
gmlasconf.xml
gmlasconf.xsd
gml_registry.xml
grib2_center.csv
grib2_process.csv
grib2_subcenter.csv
grib2_table_4_2_0_0.csv
grib2_table_4_2_0_1.csv
grib2_table_4_2_0_13.csv
grib2_table_4_2_0_14.csv
grib2_table_4_2_0_15.csv
grib2_table_4_2_0_16.csv
grib2_table_4_2_0_17.csv
grib2_table_4_2_0_18.csv
grib2_table_4_2_0_19.csv
grib2_table_4_2_0_190.csv
grib2_table_4_2_0_191.csv
grib2_table_4_2_0_2.csv
grib2_table_4_2_0_20.csv
grib2_table_4_2_0_3.csv
grib2_table_4_2_0_4.csv
grib2_table_4_2_0_5.csv
grib2_table_4_2_0_6.csv
grib2_table_4_2_0_7.csv
grib2_table_4_2_10_0.csv
grib2_table_4_2_10_1.csv
grib2_table_4_2_10_191.csv
grib2_table_4_2_10_2.csv
grib2_table_4_2_10_3.csv
grib2_table_4_2_10_4.csv
grib2_table_4_2_1_0.csv
grib2_table_4_2_1_1.csv
grib2_table_4_2_1_2.csv
grib2_table_4_2_20_0.csv
grib2_table_4_2_20_1.csv
grib2_table_4_2_20_2.csv
grib2_table_4_2_2_0.csv
grib2_table_4_2_2_3.csv
grib2_table_4_2_2_4.csv
grib2_table_4_2_2_5.csv
grib2_table_4_2_3_0.csv
grib2_table_4_2_3_1.csv
grib2_table_4_2_3_2.csv
grib2_table_4_2_3_3.csv
grib2_table_4_2_3_4.csv
grib2_table_4_2_3_5.csv
grib2_table_4_2_3_6.csv
grib2_table_4_2_4_0.csv
grib2_table_4_2_4_1.csv
grib2_table_4_2_4_10.csv
grib2_table_4_2_4_2.csv
grib2_table_4_2_4_3.csv
grib2_table_4_2_4_4.csv
grib2_table_4_2_4_5.csv
grib2_table_4_2_4_6.csv
grib2_table_4_2_4_7.csv
grib2_table_4_2_4_8.csv
grib2_table_4_2_4_9.csv
grib2_table_4_2_local_Canada.csv
grib2_table_4_2_local_HPC.csv
grib2_table_4_2_local_index.csv
grib2_table_4_2_local_MRMS.csv
grib2_table_4_2_local_NCEP.csv
grib2_table_4_2_local_NDFD.csv
grib2_table_4_5.csv
grib2_table_versions.csv
gt_datum.csv
gt_ellips.csv
header.dxf
inspire_cp_BasicPropertyUnit.gfs
inspire_cp_CadastralBoundary.gfs
inspire_cp_CadastralParcel.gfs
inspire_cp_CadastralZoning.gfs
jpfgdgml_AdmArea.gfs
jpfgdgml_AdmBdry.gfs
jpfgdgml_AdmPt.gfs
jpfgdgml_BldA.gfs
jpfgdgml_BldL.gfs
jpfgdgml_Cntr.gfs
jpfgdgml_CommBdry.gfs
jpfgdgml_CommPt.gfs
jpfgdgml_Cstline.gfs
jpfgdgml_ElevPt.gfs
jpfgdgml_GCP.gfs
jpfgdgml_LeveeEdge.gfs
jpfgdgml_RailCL.gfs
jpfgdgml_RdArea.gfs
jpfgdgml_RdASL.gfs
jpfgdgml_RdCompt.gfs
jpfgdgml_RdEdg.gfs
jpfgdgml_RdMgtBdry.gfs
jpfgdgml_RdSgmtA.gfs
jpfgdgml_RvrMgtBdry.gfs
jpfgdgml_SBAPt.gfs
jpfgdgml_SBArea.gfs
jpfgdgml_SBBdry.gfs
jpfgdgml_WA.gfs
jpfgdgml_WL.gfs
jpfgdgml_WStrA.gfs
jpfgdgml_WStrL.gfs
LICENSE.TXT
netcdf_config.xsd
nitf_spec.xml
nitf_spec.xsd
ogrvrt.xsd
osmconf.ini
ozi_datum.csv
ozi_ellips.csv
pci_datum.txt
pci_ellips.txt
pdfcomposition.xsd
pds4_template.xml
plscenesconf.json
ruian_vf_ob_v1.gfs
ruian_vf_st_uvoh_v1.gfs
ruian_vf_st_v1.gfs
ruian_vf_v1.gfs
s57agencies.csv
s57attributes.csv
s57expectedinput.csv
s57objectclasses.csv
seed_2d.dgn
seed_3d.dgn
stateplane.csv
template_tiles.mapml
tms_LINZAntarticaMapTileGrid.json
tms_MapML_APSTILE.json
tms_MapML_CBMTILE.json
tms_NZTM2000.json
trailer.dxf
vdv452.xml
vdv452.xsd
vicar.json
gdal-include
armadillo_headers.h
cplkeywordparser.h
cpl_alibaba_oss.h
cpl_atomic_ops.h
cpl_auto_close.h
cpl_aws.h
cpl_azure.h
cpl_compressor.h
cpl_config.h
cpl_config_extras.h
cpl_conv.h
cpl_cpu_features.h
cpl_csv.h
cpl_curl_priv.h
cpl_error.h
cpl_error_internal.h
cpl_float.h
cpl_google_cloud.h
cpl_hash_set.h
cpl_http.h
cpl_json.h
cpl_json_header.h
cpl_json_streaming_parser.h
cpl_json_streaming_writer.h
cpl_list.h
cpl_md5.h
cpl_mem_cache.h
cpl_minixml.h
cpl_minizip_ioapi.h
cpl_minizip_unzip.h
cpl_minizip_zip.h
cpl_multiproc.h
cpl_odbc.h
cpl_port.h
cpl_progress.h
cpl_quad_tree.h
cpl_sha1.h
cpl_sha256.h
cpl_spawn.h
cpl_string.h
cpl_swift.h
cpl_time.h
cpl_userfaultfd.h
cpl_vax.h
cpl_virtualmem.h
cpl_vsi.h
cpl_vsil_curl_class.h
cpl_vsil_curl_priv.h
cpl_vsil_plugin.h
cpl_vsi_error.h
cpl_vsi_virtual.h
cpl_worker_thread_pool.h
cpl_zlib_header.h
gdal.h
gdalexif.h
gdalgeorefpamdataset.h
gdalgrid.h
gdalgrid_priv.h
gdaljp2abstractdataset.h
gdaljp2metadata.h
gdaljp2metadatagenerator.h
gdallinearsystem.h
gdalpansharpen.h
gdalpython.h
gdalsse_priv.h
gdalwarper.h
gdalwarpkernel_opencl.h
gdal_alg.h
gdal_alg_priv.h
gdal_csv.h
gdal_frmts.h
gdal_mdreader.h
gdal_pam.h
gdal_priv.h
gdal_proxy.h
gdal_rat.h
gdal_simplesurf.h
gdal_thread_pool.h
gdal_utils.h
gdal_version.h
gdal_vrt.h
gnm.h
gnmgraph.h
gnm_api.h
gvgcpfit.h
internal_qhull_headers.h
memdataset.h
nasakeywordhandler.h
ograpispy.h
ogrgeomediageometry.h
ogrpgeogeometry.h
ogrsf_frmts.h
ogr_api.h
ogr_attrind.h
ogr_core.h
ogr_expat.h
ogr_feature.h
ogr_featurestyle.h
ogr_geocoding.h
ogr_geometry.h
ogr_geos.h
ogr_geo_utils.h
ogr_libs.h
ogr_p.h
ogr_proj_p.h
ogr_sfcgal.h
ogr_spatialref.h
ogr_srs_api.h
ogr_srs_esri_names.h
ogr_swq.h
ogr_xerces.h
ogr_xerces_headers.h
rawdataset.h
thinplatespline.h
vrtdataset.h
gdal-lib
gdal_i.lib
⑵ c++中如何把类编译成类似于库文件,以后直接包含头文件即可
请搜索“nmake makefile cl.exe lib”之类的关键字。
比如
-------------------------------
CL.exe
CL.exe是控制Microsoft C和C++编译器与链接器的32位工具。编译器产生通用对象文件格式(COFF)对象(.obj)文件。链接器产生可执行文件(.exe)或动态链接库文件(DLL)。注意,所有编译器选项都区分大小写。若要编译但不链接,请使用/c。使用NMAKE生成输出文件。使用BSCMAKE支持类浏览。以下是一个完整的编译器选项分类列表。
优化
选项 作用
/O1 创建小代码
/O2 创建快速代码
/Oa 假设没有别名
/Ob 控制内联展开
/Od 禁用优化
/Og 使用全局优化
/Oi 生成内部函数
/Op 改善浮点数一致性
/Os 代码大小优先
/Ot 代码速度优先
/Ow 假定在函数调用中使用别名
/Ox 使用最大优化 (/Ob1gity /Gs)
/Oy 省略框架指针
代码生成
选项 作用
/clr 启用C++的托管扩展并产生在公共语言运行库上运行的输出文件
/EH 指定异常处理模型
/G3 优化代码以优选386处理器。在Visual C++ 5.0 中已经停用,编译器将忽略此选项
/G4 优化代码以优选486处理器。在 Visual C++ 5.0中已经停用,编译器将忽略此选项
/G5 优化代码以优选Pentium
/GB 与/G6等效;将_M_IX86的值设置为600
/Gd 使用__cdecl调用约定
/Ge 激活堆栈探测
/GF 启用字符串池
/GH 调用挂钩函数 _penter
/GL 启用全程序优化
/Gm 启用最小重新生成
/Gr 启用运行时类型信息 (RTTI)
/Gr 使用__fastcall调用约定
/GS 控制堆栈探测
/GT 支持使用静态线程本地存储区分配的数据的纤程安全
/GX 启用同步异常处理
/Gy 启用函数级链接
/GZ 使用__stdcall调用约定
/MD 使用MSVCRT.lib创建多线程DLL
/MDd 使用MSVCRTD.lib 创建调试多线程DLL
/ML 使用LIBC.lib 创建单线程可执行文件
/MLd 使用LIBCD.lib 创建调试单线程可执行文件
/MT 使用LIBCMT.lib创建多线程可执行文件
/MTd 使用LIBCMTD.lib创建调试多线程可执行文件
输出文件
选项 作用
/FA 创建列表文件设置列表文件名
/Fd 重命名程序数据库文件
/Fe 重命名可执行文件
/Fm 创建映射文件
/Fo 创建对象文件
/Fp 指定预编译头文件名
/FR 生成浏览器文件
/Fx 将插入的代码与源文件合并
……
链接
选项 作用
/F 设置堆栈大小
/LD 创建动态链接库
/LDd 创建调试动态链接库
/link 将指定的选项传递给LINK
/MD 使用MSVCRT.lib编译以创建多线程DLL
/MDd 使用MSVCRTD.lib编译以创建调试多线程DLL
/ML 使用LIBC.lib编译以创建单线程可执行文件
/MLd 使用LIBCD.lib编译以创建调试单线程可执行文件
/MT 使用LIBCMT.lib编译以创建多线程可执行文件
/MTd 使用 LIBCMTD.lib 编译以创建调试多线程可执行文件
……
……
……
更多的我就不贴出来了。。。msdn中对nmake作了详细说明的。
下面一个nmake的makefile例子:
#命令
CC=cl.exe
DEL=del /Q /S
#头文件与库文件目录
INCLUDES=
LIBS=
#编译链接选项与宏定义
MT=MD ---------------(1)
DEFS=-DWIN32
MOD= ---------------(2)
#输出文件
OUTPUT=test.exe
OBJS=main.obj
#内部变量
CFLAGS=/$(MT) $(INCLUDES) $(DEFS) /nologo
LINK=link $(MOD) /OUT:"$(OUTPUT)"
#依赖关系
all:$(OBJS)
$(LINK) $(OBJS)
main.obj:
$(CC) $(CFLAGS) main.cpp -Fo%|fF.obj
clean:
del /Q /S $(OBJS) $(OUTPUT)*
(1):
MD 使用MSVCRT.lib创建多线程DLL
MDd 使用MSVCRTD.lib 创建调试多线程 DLL
ML 使用LIBC.lib创建单线程可执行文件
MLd 使用LIBCD.lib创建调试单线程可执行文件
MT 使用LIBCMT.lib创建多线程可执行文件
MTd 使用LIBCMTD.lib创建调试多线程可执行文件
(2):
为空 生成可执行文件
/LIB 生成静态链接库
/DLL 生成动态链接库
⑶ 从PLC上传上来的程序,OB1怎么就编译不过呢
我也遇见过同样的问题!正常运行的设备上传的OB1发现加密,用解密软件解密后就出现了和楼主一样的问题了,后来没有办法因为确实要修改OB1中的程序,就只要重新写编译不过的程序了。其实编译不过的都是些调用其它块的指令,按正常的调用修改就可以了!