对CMAKE一窍不通的Windows11下编译GDAL3.7.2方法及编成版本分享
完全不会Cmake但是要用到Gdal库,网上的教程都建立在会Cmake的基础上,导致很多步骤看不懂,本身Gdal编译过程就长,导致本人抓耳挠腮,好在最后编译完成了特此记录!
用到的库:
gdal-3.7.2 | proj-9.2.0 | tiff-4.2.0 | jpeg-9c | sqlite3.43.1 |
https://gdal.org/download.html | https://proj.org/en/9.3/download.html | http://download.osgeo.org/libtiff/ | http://ijg.org/ | https://www.sqlite.org/download.html |
工具:
Visual Studio 2022 | Cmake 3.26 |
至少安装使用C++的桌面开发工具 | 包含GUI,因为我不会命令行 |
1.编译sqlite3
直接参考这篇文章https://cuifeng.blog.csdn.net/article/details/130727123
注意:有的教程中没有sqlite3ext.h。这个是必须有的,不然会影响后续编译。
2.编译tiff
参考这篇文章https://blog.csdn.net/oFengtingwano/article/details/130742086?spm=1001.2014.3001.5506
注意:使用visual studio生成时记得release版本和debug版本都生成一次,如图位置切换。
2-1.编译jpeg
部分教程中的tiff是需要编译jpeg的,我用上面文章的方法没有碰到jpeg相关内容,但是既然干了就记录下,tiff编译完成的可以跳过这部分直接看第三步,以下的编译方法对tiff也适用,但是需要修改opt文件很麻烦。
1.复制win32.mak文件,可以C盘搜一下,反正我的电脑没有这个文件,直接复制以下内容,新建txt文本并重命名为win32.mak并复制进去。
# Win32.Mak - Win32 application master NMAKE definitions file for the # Microsoft Windows SDK programming samples # Copyright (C) Microsoft Corporation # ------------------------------------------------------------------------- # This files should be included at the top of all MAKEFILEs as follows: # !include <Win32.Mak> # ------------------------------------------------------------------------- # # Define APPVER = [ 4.0 | 5.0 | 5.01 | 5.02 | 6.0 | 6.1] prior to including win32.mak to get # build time checking for version dependencies and to mark the executable # with version information. # # Define TARGETOS = [ WIN95 | WINNT | BOTH ] prior to including win32.mak # to get some build time checking for platform dependencies. # # Define TARGETLANG = [ LANG_JAPANESE | LANG_CHINESE | LANG_KOREAN ] prior # to including win32.mak to getcompile & link flags for building # applications to run on Far-East Windows. (This is an optional parameter. # The system locale is the default.) # # Define _WIN32_IE = [ 0x0300 | 0x0400 | 0x0500 | 0x0600 | 0x0700 | 0x0800] prior to including win32.mak to # get compile and link flags for building applications and components to # run on Internet Explorer. (This is an optional parameter. IE 4.0 is # the default.) # # ------------------------------------------------------------------------- # NMAKE Options # # Use the table below to determine the additional options for NMAKE to # generate various application debugging, profiling and performance tuning # information. # # Application Information Type Invoke NMAKE # ---------------------------- ------------ # For No Debugging Info nmake nodebug=1 # For Working Set Tuner Info nmake tune=1 # For Call Attributed Profiling Info nmake profile=1 # # Note: The three options above are mutually exclusive (you may use only # one to compile/link the application). # # Note: creating the environment variables NODEBUG, TUNE, and PROFILE is an # alternate method to setting these options via the nmake command line. # # Note: TUNE and PROFILE do nothing for 64bit compilation # # Additional NMAKE Options Invoke NMAKE # ---------------------------- ------------ # For No ANSI NULL Compliance nmake no_ansi=1 # (ANSI NULL is defined as PVOID 0) # # ========================================================================= # Build Rules Quick Start # # To build one of the following types of executables, use the specified # compiler and linker command-line options. # # --------------------------------------------------------------------------- # To build: | Compiler Options | Linker options (pick one # | | line. con = console, # | | gui = GUI, ole = GUI OLE) # --------------------------------------------------------------------------- # Single threaded | cdebug cflags cvars | ldebug guilflags guilibs # app with static | | ldebug conlflags conlibs # CRT | | ldebug guilflags olelibs # --------------------------------------------------------------------------- # Multithreaded app | cdebug cflags cvarsmt | ldebug guilflags guilibsmt # with static CRT | | ldebug conlflags conlibsmt # | | ldebug guilflags olelibsmt # --------------------------------------------------------------------------- # Single or multi- | cdebug cflags cvarsdll | ldebug guilflags guilibsdll # threaded app with | | ldebug conlflags conlibsdll # DLL version of CRT | | ldebug guilflags olelibsdll # (MSVCRT.DLL) | | # --------------------------------------------------------------------------- # DLL with static | cdebug cflags cvarsmt | ldebug dlllflags guilibsmt # CRT* | | ldebug dlllflags conlibsmt # | | ldebug dlllflags olelibsmt # --------------------------------------------------------------------------- # DLL with DLL | cdebug cflags cvarsdll | ldebug dlllflags guilibsdll # version of CRT | | ldebug dlllflags conlibsdll # (MSVCRT.DLL) | | ldebug dlllflags olelibsdll # --------------------------------------------------------------------------- # # * Always make DLLs multithreaded because a DLL has no way to know whether # the calling application has multiple threads, and has no way to prevent # multithreaded apps from loading it. # # To specify an Intel x86 build that defaults to stdcall, add scall to the # list of compiler options. # # ========================================================================= !IFNDEF _WIN32_MAK_ _WIN32_MAK_ = 1 # ------------------------------------------------------------------------- # Get CPU Type - exit if CPU environment variable is not defined # ------------------------------------------------------------------------- # Win95 does not define PROCESSOR_ARCHITECTURE - default to i386 !IF "$(PROCESSOR_ARCHITECTURE)" == "" CPU=i386 PROCESSOR_ARCHITECTURE=x86 !endif !IF !DEFINED(CPU) || "$(CPU)" == "" CPU = $(PROCESSOR_ARCHITECTURE) !ENDIF # CPU # if PROCESSOR_ARCHITECTURE was x86 or X86 change CPU to i386 !IF ( "$(CPU)" == "X86" ) || ( "$(CPU)" == "x86" ) CPU = i386 !ENDIF # CPU == X86 !IF "$(CPU)" != "i386" !IF "$(CPU)" != "IA64" !IF "$(CPU)" != "AMD64" !ERROR Must specify CPU environment variable ( CPU=i386, CPU=IA64, CPU=AMD64) !ENDIF !ENDIF !ENDIF # ------------------------------------------------------------------------- # Get Target Operating System - Default to WINNT # ------------------------------------------------------------------------- !IFNDEF TARGETOS TARGETOS = WINNT !ENDIF !IF "$(TARGETOS)" != "WINNT" !IF "$(TARGETOS)" != "WIN95" !IF "$(TARGETOS)" != "BOTH" !ERROR Must specify TARGETOS environment variable (BOTH, WIN95, WINNT) !ENDIF !ENDIF !ENDIF # default to APPVER of 5.0 !IFNDEF APPVER APPVER = 5.0 !ENDIF !IF "$(APPVER)" != "6.1" !IF "$(APPVER)" != "6.0" !IF "$(APPVER)" != "5.02" !IF "$(APPVER)" != "5.01" !IF "$(APPVER)" != "5.0" !IF "$(APPVER)" != "4.0" !ERROR Must specify APPVER environment variable (4.0, 5.0, 5.01, 5.02, 6.0, 6.1) !ENDIF !ENDIF !ENDIF !ENDIF !ENDIF !ENDIF !IF "$(APPVER)" =="6.1" !IFNDEF _WIN32_IE _WIN32_IE = 0x0800 !ENDIF # _WIN32_IE !ENDIF # APPVER == 6.1 !IF "$(APPVER)" =="6.0" !IFNDEF _WIN32_IE _WIN32_IE = 0x0700 !ENDIF # _WIN32_IE !ENDIF # APPVER == 6.0 !IF "$(APPVER)" =="5.0" !IFNDEF _WIN32_IE _WIN32_IE = 0x0500 !ENDIF # _WIN32_IE !ENDIF # APPVER == 5.0 !IF "$(APPVER)" =="5.01" !IFNDEF _WIN32_IE _WIN32_IE = 0x0600 !ENDIF # _WIN32_IE !ENDIF # APPVER == 5.01 !IF "$(APPVER)" =="5.02" !IFNDEF _WIN32_IE _WIN32_IE = 0x0600 !ENDIF # _WIN32_IE !ENDIF # APPVER == 5.02 !IFNDEF _WIN32_IE _WIN32_IE = 0x0400 !ENDIF # ------------------------------------------------------------------------- # Build tool declarations common to all platforms # Check to see if Cole Porter is used, otherwise use C/C++ compiler # ------------------------------------------------------------------------- cc = cl link = link implib = lib midl = midl rc = Rc hc = Start /Wait Hcrtf mc = Mc hcvars = -xn # ------------------------------------------------------------------------- # Platform Dependent Compile Flags - must be specified after $(cc) # # Note: Debug switches are on by default for current release # # These switches set code generation and debugging options for the compiler. # They also set macros used for conditional compilation. # # The debugging switches allow for source level debugging with WinDebug or # Microsoft Visual C++. # # Common compiler flags: # -c - compile without linking # -W3 - Set warning level to level 3 (-W4 for 64-bit compilations) # -Zi - generate debugging information # -Od - disable all optimizations # -Ox - use maximum optimizations # -Zd - generate only public symbols and line numbers for debugging # -GS - enable security checks # # i386 specific compiler flags: # -Gz - stdcall (only if scall is added to makefile's compiler build rules) # # ------------------------------------------------------------------------- # declarations common to all compiler options ccommon = -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS # for compatibility with old source code, map {try, except, leave, finally} # to their proper names (i.e. prefaced by "__") !IFDEF SEHMAP ccommon = $(ccommon) -FIsehmap.h !ENDIF !IF "$(TARGETLANG)" == "LANG_JAPANESE" ccommon = $(ccommon) -DJAPAN -DDBCS -DFE_IME !ENDIF !IF "$(TARGETLANG)" == "LANG_CHINESE" ccommon = $(ccommon) -DDBCS -DFE_IME !ENDIF !IF "$(TARGETLANG)" == "LANG_KOREAN" ccommon = $(ccommon) -DDBCS -DFE_IME !ENDIF !IF "$(CPU)" == "i386" cflags = $(ccommon) -D_X86_=1 -DWIN32 -D_WIN32 -W3 scall = -Gz !ELSEIF "$(CPU)" == "IA64" cflags = $(ccommon) -D_IA64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 cflags = $(cflags) -W4 scall = !ELSEIF "$(CPU)" == "AMD64" cflags = $(ccommon) -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 cflags = $(cflags) -W4 scall = !ENDIF !IF "$(APPVER)" == "4.0" NMAKE_WINVER = 0x0400 !ELSEIF "$(APPVER)" == "5.0" NMAKE_WINVER = 0x0500 !ELSEIF "$(APPVER)" == "5.01" NMAKE_WINVER = 0x0501 !ELSEIF "$(APPVER)" == "5.02" NMAKE_WINVER = 0x0502 !ELSEIF "$(APPVER)" == "6.0" NMAKE_WINVER = 0x0600 !ELSEIF "$(APPVER)" == "6.1" NMAKE_WINVER = 0x0601 !ENDIF !IF "$(TARGETOS)" == "WINNT" cflags = $(cflags) -D_WINNT -D_WIN32_WINNT=$(NMAKE_WINVER) -DNTDDI_VERSION=$(NMAKE_WINVER)0000 !ENDIF !IF "$(TARGETOS)" == "WIN95" cflags = $(cflags) -D_WIN95 -D_WIN32_WINDOWS=$(NMAKE_WINVER) /D_WIN32_DCOM !ENDIF # regardless of the TARGET OS, define compile time WINVER to match APPVER macro cflags = $(cflags) -D_WIN32_IE=$(_WIN32_IE) -DWINVER=$(NMAKE_WINVER) # Set debugging options !IF "$(CPU)" != "IA64" !IFDEF NODEBUG cdebug = -Ox -DNDEBUG !ELSE IFDEF PROFILE cdebug = -Gh -Ox -DNDEBUG !ELSE IFDEF TUNE cdebug = -Gh -Ox -DNDEBUG !ELSE cdebug = -Zi -Od -DDEBUG !ENDIF !ELSE !IFDEF NODEBUG cdebug = -Ox -DNDEBUG !ELSE cdebug = -Zi -Od -DDEBUG !ENDIF !ENDIF # ------------------------------------------------------------------------- # Target Module & Subsystem Dependent Compile Defined Variables - must be # specified after $(cc) # # The following table indicates the various acceptable combinations of # the C Run-Time libraries LIBC, LIBCMT, and MSVCRT respect to the creation # of a EXE and/or DLL target object. The appropriate compiler flag macros # that should be used for each combination are also listed. # # Executable Type C Runtime Lib Compiler switch # ------------------------------------------------------------- # Single threaded app static CRT CVARS * # Single-threaded app DLL CRT CVARSDLL # Multi-threaded app static CRT CVARSMT * # Multi-threaded app DLL CRT CVARSDLL * # # Single threaded DLL static CRT CVARS # Single-threaded DLL DLL CRT CVARSDLL # Multi-threaded DLL static CRT CVARSMT * # Multi-threaded DLL DLL CRT CVARSDLL * # # * - Denotes the Recommended Configuration # # When building single-threaded applications you can link your executable # with either LIBC, LIBCMT, or MSVCRT, although LIBC will provide the best # performance. # # When building multi-threaded applications, either LIBCMT or MSVCRT can # be used as the C-Runtime library, as both are multi-thread safe. # # Note: Any executable which accesses a DLL linked with MSVCRT.LIB must # also link with MSVCRT.LIB instead of LIBC.LIB or LIBCMT.LIB. # When using DLLs, it is recommended that all of the modules be # linked with MSVCRT.LIB. # # Note: The macros of the form xDLL are used when linking the object with # the DLL version of the C Run-Time (that is, MSVCRT.LIB). They are # not used when the target object is itself a DLL. # # ------------------------------------------------------------------------- !IFDEF NO_ANSI noansi = -DNULL=0 !ENDIF # for Windows applications that use the C Run-Time libraries !IFDEF NODEBUG cvarsmt = $(noansi) -D_MT -MT cvars = $(cvarsmt) cvarsdll = $(noansi) -D_MT -D_DLL -MD !ELSE cvarsmt = $(noansi) -D_MT -MTd cvars = $(cvarsmt) cvarsdll = $(noansi) -D_MT -D_DLL -MDd !ENDIF # for compatibility with older-style makefiles cvarsmtdll = $(cvarsdll) # for POSIX applications psxvars = -D_POSIX_ # resource compiler rcflags = /r !ifdef NODEBUG rcvars = -DWIN32 -D_WIN32 -DWINVER=$(NMAKE_WINVER) $(noansi) !else rcvars = -DWIN32 -D_WIN32 -DWINVER=$(NMAKE_WINVER) -DDEBUG -D_DEBUG $(noansi) !endif !IF "$(TARGETLANG)" == "LANG_JAPANESE" rcflags = $(rcflags) /c932 rcvars = $(rcvars) -DJAPAN -DDBCS -DFE_IME !ENDIF !IF "$(TARGETLANG)" == "LANG_CHINESE" rcvars = $(rcvars) -DDBCS -DFE_IME !ENDIF !IF "$(TARGETLANG)" == "LANG_KOREAN" rcvars = $(rcvars) -DDBCS -DFE_IME !ENDIF # ------------------------------------------------------------------------- # Platform Dependent MIDL Flags - must be specified after midl # # # ------------------------------------------------------------------------- !IF "$(TARGETOS)" == "WIN95" MIDL_OPTIMIZATION=-target NT40 !ELSEIF "$(TARGETOS)" == "WINNT" !IF "$(APPVER)" == "5.0" MIDL_OPTIMIZATION=-target NT50 !ELSEIF "$(APPVER)" == "6.0" MIDL_OPTIMIZATION=-target NT60 !ELSEIF "$(APPVER)" == "6.1" MIDL_OPTIMIZATION=-target NT61 !ELSEIF "$(APPVER)" == "5.01" MIDL_OPTIMIZATION=-target NT51 !ELSEIF "$(APPVER)" == "5.02" MIDL_OPTIMIZATION=-target NT51 !ELSEIF "$(APPVER)" == "4.0" MIDL_OPTIMIZATION=-target NT40 !ENDIF !ENDIF !IF "$(CPU)" == "IA64" MIDL_OPTIMIZATION = $(MIDL_OPTIMIZATION) /ia64 !ELSEIF "$(CPU)" == "AMD64" MIDL_OPTIMIZATION = $(MIDL_OPTIMIZATION) /x64 !ELSE MIDL_OPTIMIZATION = $(MIDL_OPTIMIZATION) /win32 !ENDIF !IF ("$(TARGETOS)" == "WINNT" ) && ("$(APPVER)" != "4.0") MIDL_OPTIMIZATION = $(MIDL_OPTIMIZATION) /robust !ENDIF # ------------------------------------------------------------------------- # Platform Dependent Link Flags - must be specified after $(link) # # Note: $(DLLENTRY) should be appended to each -entry: flag on the link # line. # # Note: When creating a DLL that uses C Run-Time functions it is # recommended to include the entry point function of the name DllMain # in the DLL's source code. Also, the MAKEFILE should include the # -entry:_DllMainCRTStartup$(DLLENTRY) option for the creation of # this DLL. (The C Run-Time entry point _DllMainCRTStartup in turn # calls the DLL defined DllMain entry point.) # # ------------------------------------------------------------------------- # declarations common to all linker options lflags = $(lflags) /INCREMENTAL:NO /NOLOGO # declarations for use on Intel x86 systems !IF "$(CPU)" == "i386" DLLENTRY = @12 !ENDIF # declarations for use on Intel Architecture 64-bit systems !IF "$(CPU)" == "IA64" DLLENTRY = !ENDIF # declarations for use on AMD64 systems !IF "$(CPU)" == "AMD64" DLLENTRY = !ENDIF # ------------------------------------------------------------------------- # Target Module Dependent Link Debug Flags - must be specified after $(link) # # These switches allow the inclusion of the necessary symbolic information # for source level debugging with WinDebug, profiling and/or performance # tuning. # # Note: Debug switches are on by default. # ------------------------------------------------------------------------- !IF "$(CPU)" == "i386" !IFDEF NODEBUG ldebug = /RELEASE !ELSE ldebug = /DEBUG /DEBUGTYPE:cv !ENDIF !ELSE !IFDEF NODEBUG ldebug = /RELEASE !ELSE IFDEF PROFILE ldebug = /DEBUG:mapped,partial /DEBUGTYPE:coff !ELSE IFDEF TUNE ldebug = /DEBUG:mapped,partial /DEBUGTYPE:coff !ELSE ldebug = /DEBUG /DEBUGTYPE:cv !ENDIF !ENDIF # for compatibility with older-style makefiles linkdebug = $(ldebug) # ------------------------------------------------------------------------- # Subsystem Dependent Link Flags - must be specified after $(link) # # These switches allow for source level debugging with WinDebug for local # and global variables. They also provide the standard application type and # entry point declarations. # # Note that on x86 screensavers have a WinMain entrypoint, but on RISC # platforms it is main. This is a Win95 compatibility issue. # # ------------------------------------------------------------------------- # Windows 98 needs subsystem version set to 4.10 for version 5.0 features. !IF ("$(APPVER)" == "5.0") && (("$(TARGETOS)" == "BOTH") || ("$(TARGETOS)" == "WIN95")) EXEVER = 4.10 !ELSE EXEVER = $(APPVER) !ENDIF # --------------------------------------------- # for Windows applications conlflags = $(lflags) -subsystem:console,$(EXEVER) guilflags = $(lflags) -subsystem:windows,$(EXEVER) dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll # For screen savers !IF "$(CPU)" == "i386" savlflags = $(lflags) -subsystem:windows,$(EXEVER) -entry:WinMainCRTStartup !ELSE savlflags = $(lflags) -subsystem:windows,$(EXEVER) -entry:mainCRTStartup !ENDIF # for POSIX applications psxlflags = $(lflags) -subsystem:posix -entry:__PosixProcessStartup # for compatibility with older-style makefiles conflags = $(conlflags) guiflags = $(guilflags) psxflags = $(psxlflags) # ------------------------------------------------------------------------- # C Run-Time Target Module Dependent Link Libraries # # Note: For POSIX applications, link with $(psxlibs). # ------------------------------------------------------------------------- # for POSIX applications psxlibs = libcpsx.lib psxdll.lib psxrtl.lib oldnames.lib # optional profiling and tuning libraries !IF "$(CPU)" != "IA64" !IFDEF PROFILE optlibs = cap.lib !ELSE IFDEF TUNE optlibs = wst.lib !ELSE optlibs = !ENDIF !ELSE optlibs = !ENDIF # if building for basic Windows 95, use WinSock1, else use WinSock2 !IF "$(TARGETOS)" == "WIN95" !IF "$(APPVER)" == "4.0" winsocklibs = wsock32.lib !ELSE winsocklibs = ws2_32.lib mswsock.lib !ENDIF !ELSE winsocklibs = ws2_32.lib mswsock.lib !ENDIF # basic subsystem specific libraries, less the C Run-Time baselibs = kernel32.lib $(optlibs) $(winsocklibs) advapi32.lib winlibs = $(baselibs) user32.lib gdi32.lib comdlg32.lib winspool.lib # for Windows applications that use the C Run-Time libraries conlibs = $(baselibs) guilibs = $(winlibs) # for OLE applications olelibs = ole32.lib uuid.lib oleaut32.lib $(guilibs) #for backwards compatibility conlibsmt = $(conlibs) conlibsdll = $(conlibs) guilibsmt = $(guilibs) guilibsdll = $(guilibs) olelibsmt = $(olelibs) olelibsdll = $(olelibs) # for backward compatibility ole2libs = $(olelibs) ole2libsmt = $(olelibsmt) ole2libsdll = $(olelibsdll) # Visual Basic bc = vb6 bc_exe = /Make bc_dll = /Makedll # Set the Output Directory !IF ("$(APPVER)" == "6.1") OUTDIR=WIN7 !ELSEIF ("$(APPVER)" == "6.0") OUTDIR=Vista !ELSEIF "$(APPVER)" == "5.0" OUTDIR=WIN2000 !ELSEIF "$(APPVER)" == "5.01" OUTDIR=XP32 !ELSEIF "$(APPVER)" == "5.02" OUTDIR=SRV2003 !ELSEIF "$(APPVER)" == "4.0" OUTDIR=NT4 !ENDIF !IF "$(CPU)" == "AMD64" OUTDIR=$(OUTDIR)_X64 !ELSEIF "$(CPU)" == "IA64" OUTDIR=$(OUTDIR)_64 !ENDIF #set Prerelease Out directories !IF "$(SDKPRERELEASE)" == "1" OUTDIR=PRE_$(OUTDIR) !ENDIF #Set DEBUG !IF "$(NODEBUG)" == "" OUTDIR=$(OUTDIR)_DEBUG !ELSE OUTDIR=$(OUTDIR)_RETAIL !ENDIF !IF "$(OS)" == "Windows_NT" CLEANUP=if exist $(OUTDIR)/$(NULL) rd /s /q $(OUTDIR) !ELSE CLEANUP=deltree /y $(OUTDIR) !ENDIF VC6MSG=This sample only compiles with Microsoft Visual C++ 6.0. \ To compile this run vcvars32.bat for Visual C++ 6.0, and setenv.bat in $(MSSDK). WIN64MSG=This sample is currently not supported on the 64 bit platform. #ENDIF _WIN32_MAK_ !ENDIF
解压后复制jconfig.vc,并重命名为jconfig.h
在jpeg文件夹打开命令行,并找到vs2022安装目录,按如图输入(很多vs安装目录有空格,命令行会将空格识别为命令分隔符,使用” “来区分空格文本和空格)
再输入nmake -f makefile.vc
生成了这个
教程原文找不到了,正好还记得就记录一下吧!
3.编译proj
参考此文章https://blog.csdn.net/oFengtingwano/article/details/130743707?spm=1001.2014.3001.5506
值得注意的是小白依然可以用tiff编译教程中生成后打开sln工程的方法来生成,简单快捷,包括后面的gdal编译,最好还是把debug和release都编译一遍。
4.编译Gdal
查了很多资料,不知道为什么我下载的文件中并没有makefile也没有opt文件,无奈自己又不懂编译,但是突然发现上面教程的方法同样可以用于当前的Gdal。
4-1.cmake打开Gdal并config选择vs2022和X64发生经典问题:
提示找不到proj
添加编译好的proj库,注意这里需要debug和release两个库,不知道能不能只用一个,反正我两个都编译了,一般debug版本的lib名称最后都会比release多一个d。我更喜欢用release,因为C++debug编译太慢了!
同理添加sqlite3和tiff,按首字母排序找下去就可以。
之后和上面文章是一样的vs生成。对all和install生成即可。
我编译完的版本:
链接:https://pan.baidu.com/s/1Q5c4ptHsep3bGUW4beWjpw?pwd=vjb3
提取码:vjb3
--来自百度网盘超级会员V6的分享
最后的PS:在C++调用gdal库时会提示缺少proj_9_2.dll,找proj编译版本添加即可,但仍有一个程序无法运行的错误且没有多余提示,发现是缺少tiff.dll,也是去编译完的版本找。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~