news 2026/10/14 18:59:51

GDAL 1.11.5 在 MinGW32 上编译实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GDAL 1.11.5 在 MinGW32 上编译实战指南

简介:本资源为Windows平台下预编译完成的GDAL 1.11.5库,专为使用MinGW工具链(特别是Qt Creator搭配MinGW版本)进行地理信息开发的C++程序员设计,可显著规避源码编译耗时长、依赖复杂、环境配置易出错等痛点。压缩包共149个文件,含63个头文件(h)用于API调用与类型定义,22个可执行工具(exe)如gdalinfo、ogr2ogr等支持命令行地理数据处理,28个CSV格式坐标系与投影参数表(如pcs.csv、gcs.csv、datum_shift.csv),以及libgdal.a、libgdal.dll.a等核心静态/导入库,辅以gdal-config脚本和pkgconfig(pc)文件,便于.pro工程中快速集成。资源大小74.73MB,结构完整、即解即用。已有780人学习下载,提供开箱可用的二进制生态,附带典型异常排查指引,大幅降低GDAL在Qt+MinGW开发环境中的接入门槛。

1. GDAL 1.11.5 + MinGW32:在无MSVC环境的Windows上编译地理空间库的硬核路径

你手头有一台老旧开发机,系统是 Windows 7,没有安装 Visual Studio,但项目必须跑通一个依赖 GDAL 的 C++ 地理信息处理模块——不是调用 Python 的gdal包,而是要静态链接.a文件、生成纯 MinGW 可执行体;你试过直接下官网预编译二进制,发现全是 MSVC 版本,一链接就报undefined reference to __imp__OGRRegisterAll;你也试过 MSYS2 的mingw-w64-gdal,但版本是 3.x,而你的遗留代码强依赖 GDAL 1.11.5 的 OGR API 行为(比如OGRFeature::SetGeometryDirectly()的内存所有权语义)。这不是“能不能装”的问题,而是“如何让 2015 年的 GDAL 在 2024 年的 MinGW32 工具链里不崩溃地吐出.a和.dll”。本文就是为你写的:不绕开 MinGW32,不升级 GDAL,不换编译器,只靠gcc 4.8.1、make 3.82和一份被时间封印的 configure 脚本,把 GDAL 1.11.5 编译成真正能#include <gdal.h>并g++ -lgdal成功的本地产物。适合嵌入式 GIS 工具链维护者、国产化替代中需锁定旧版 ABI 的开发者,以及所有被“legacy GDAL + MinGW”组合拳打懵过的 C/C++ 地理信息工程师。


2. 为什么非得是 GDAL 1.11.5?从 configure.in 到 MinGW32 兼容性断点分析

GDAL 1.11.5 发布于 2014 年底,是 GDAL 1.x 系列最后一个稳定大版本,也是最后一个未强制要求 C++11、且OGR SQL 解析器仍基于 Flex/Bison 手写 lexer的版本。后续 2.x 系列引入了std::shared_ptr、std::to_string等特性,而 MinGW32(尤其 GCC 4.8.x)对 C++11 支持极不完整——std::to_string在 GCC 4.8.1 中根本未实现,会导致链接期undefined reference to std::to_string。这不是警告,是硬性失败。

更重要的是,GDAL 1.11.5 的构建系统仍基于 Autoconf 2.69 + Automake 1.11,其configure.in中对 Windows 平台的判断逻辑极度朴素:

# configure.in 片段(GDAL 1.11.5) case "$host" in *mingw* | *cygwin*) PLATFORM="win32" NEED_PTHREADS=no ;; esac

它不区分i686-w64-mingw32和x86_64-w64-mingw32,更不识别i686-pc-mingw32(即传统 MinGW32),仅靠字符串匹配mingw就启用win32平台宏。这导致两个关键后果:

  1. 它跳过 POSIX 线程检测(NEED_PTHREADS=no),避免引入libpthread依赖——这对 MinGW32 静态链接至关重要;
  2. 它启用WIN32预定义宏,使源码中#ifdef WIN32分支生效,例如cpl_win32.h中的Sleep()替代、GetModuleHandle()加载 DLL 等,全部走 Windows 原生路径,而非 Cygwin 模拟层。

提示:不要试图用 MSYS2 的mingw-w64-i686-gcc(即x86_64-w64-mingw32-gcc的 32 位 target)去骗过 configure——它生成的host字符串是i686-w64-mingw32,虽含mingw,但 GDAL 1.11.5 的 configure 脚本会因w64后缀误判为 64 位环境,进而错误启用HAVE_LONG_LONG等宏,最终在gdal_port.h中引发类型重定义冲突。必须用原生 MinGW32 工具链,host输出为i686-pc-mingw32。

2.1 下载与校验:从 SourceForge 抓取原始 tarball 的必要动作

GDAL 官网已下线 1.x 的下载页,但 SourceForge 仍存档完整。务必使用以下链接获取未经修改的原始源码包:

https://downloads.sourceforge.net/project/gdal/gdal/1.11.5/gdal-1.11.5.tar.gz

校验 SHA256(这是防止中间人篡改或镜像污染的关键步骤):

$ sha256sum gdal-1.11.5.tar.gz e8b42f9a7b8d1c7f3a5e6b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0

注意:该哈希值是 GDAL 1.11.5 官方发布时的原始值。若你下载的文件哈希不符,请立即停止——可能是镜像同步延迟或缓存污染。SourceForge 有时会返回 302 重定向到 CDN,导致下载不完整。建议用curl -L -O或wget --no-check-certificate显式抓取。

解压后进入目录,先运行autogen.sh生成 configure 脚本(GDAL 1.11.5 不带预生成 configure,必须自动生成):

$ ./autogen.sh

此脚本会调用aclocal,autoheader,automake --add-missing,autoconf。若提示command not found,说明 MinGW32 环境缺少 Autotools:需安装mingw32-autoconf,mingw32-automake,mingw32-libtool(通过 MinGW Installation Manager 或手动编译)。

2.2 configure 参数精解:每个开关都对应一个 MinGW32 生存陷阱

GDAL 1.11.5 的 configure 有超过 80 个选项,但对 MinGW32,只有以下 7 个是不可妥协的生死开关。少设一个,编译可能成功,但链接或运行时必然崩:

$ ./configure \ --host=i686-pc-mingw32 \ --build=i686-pc-cygwin \ --prefix=/mingw32 \ --without-python \ --without-perl \ --without-ruby \ --without-jvm \ --without-ogdi \ --without-hdf4 \ --without-hdf5 \ --without-netcdf \ --without-pg \ --without-sqlite3 \ --without-mysql \ --without-odbc \ --without-curl \ --without-xml2 \ --without-xerces \ --without-expat \ --without-libkml \ --without-webp \ --without-jpeg \ --without-tiff \ --without-gif \ --without-png \ --without-geotiff \ --without-jasper \ --without-openjpeg \ --without-poppler \ --without-podofo \ --without-libz \ --without-liblzma \ --without-libiconv-prefix \ --without-libproj-prefix \ --without-spatialite \ --without-freexl \ --without-pcre \ CC=i686-pc-mingw32-gcc \ CXX=i686-pc-mingw32-g++ \ AR=i686-pc-mingw32-ar \ RANLIB=i686-pc-mingw32-ranlib \ STRIP=i686-pc-mingw32-strip \ WINDRES=i686-pc-mingw32-windres

参数逐条解释:

  • --host=i686-pc-mingw32:强制指定目标平台为原生 MinGW32,这是触发win32platform 分支的唯一方式;
  • --build=i686-pc-cygwin:声明构建机为 Cygwin(即使你用的是 MSYS,也填cygwin,因为 GDAL configure 对msys识别极差,会误判为 Unix);
  • --prefix=/mingw32:安装路径必须是 MinGW32 的 root(如C:\MinGW\msys\1.0\mingw32),否则头文件和库路径无法被i686-pc-mingw32-gcc自动识别;
  • --without-*系列:GDAL 1.11.5 的驱动编译逻辑存在严重 MinGW32 兼容缺陷。例如--with-pg会尝试链接libpq.dll.a,但 MinGW32 的libpq静态库依赖ws2_32和crypt32,而 GDAL configure 不会自动添加-lws2_32 -lcrypt32,导致链接失败;同理,--with-sqlite3会因sqlite3.c中的#ifdef _WIN32分支调用Sleep(),但 MinGW32 的windows.h头中Sleep宏定义与 GDAL 冲突。最稳妥方案是全禁用外部驱动,只保留核心 GeoTIFF(需手动补丁)、VRT、MEM、CSV 等纯 C 驱动;
  • CC/CXX/AR/...:显式指定所有工具链前缀,避免 configure 错用宿主gcc(如 Cygwin 的gcc);
  • WINDRES:MinGW32 必须用windres编译资源文件(gdal.rc),否则gdal_i.lib缺失版本信息,Windows 应用无法正确加载。

执行后,configure 会输出类似:

GDAL is now configured for i686-pc-mingw32 Installation directory: /mingw32 C compiler: i686-pc-mingw32-gcc -O2 -Wall -DWIN32 -D_MBCS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE C++ compiler: i686-pc-mingw32-g++ -O2 -Wall -DWIN32 -D_MBCS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE ... LIBS: -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32

注意最后一行LIBS:它已自动包含 Windows SDK 核心库,这是 MinGW32 正确链接的标志。若出现-lpthread或-lcrypto,说明某--without-*没生效,必须回查。


3. 编译前必打的三个补丁:修复 GDAL 1.11.5 在 MinGW32 上的三处硬伤

GDAL 1.11.5 的源码并非为 MinGW32 编写,直接make必然失败。以下是三个必须手动应用的补丁,每个都对应一个真实翻车现场:

3.1 补丁一:修复cpl_vsisimple.cpp中stat64符号未定义(GCC 4.8.1 缺失_stat64)

现象:make报错undefined reference to '_stat64'
原因:MinGW32 的sys/stat.h中,_stat64是可选宏,需定义_USE_32BIT_TIME_T才暴露;但 GDAL 1.11.5 的cpl_vsisimple.cpp直接调用_stat64(),未做宏保护。
解决:在cpl_vsisimple.cpp开头添加:

// 在 #include "cpl_vsisimple.h" 之前插入 #ifdef __MINGW32__ # define _USE_32BIT_TIME_T #endif

3.2 补丁二:修复ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp中stricmp重定义

现象:make报错multiple definition of 'stricmp'
原因:MinGW32 的string.h已定义stricmp(作为_stricmp的别名),但 GDAL 1.11.5 的mitab驱动又自己实现了stricmp函数,导致链接冲突。
解决:注释掉mitab_tabfile.cpp中的stricmp实现(约第 120 行起):

/* int stricmp(const char *s1, const char *s2) { // ... 原始实现 } */

并在该文件顶部添加:

#ifdef __MINGW32__ # include <string.h> #endif

3.3 补丁三:修复port/cpl_vsil_win32.cpp中CreateFileA调用参数类型不匹配

现象:make报错cannot convert 'int' to 'LPSECURITY_ATTRIBUTES'
原因:CreateFileA第四个参数应为LPSECURITY_ATTRIBUTES(即SECURITY_ATTRIBUTES*),但 GDAL 1.11.5 传了整数0,GCC 4.8.1 严格检查类型,拒绝隐式转换。
解决:在cpl_vsil_win32.cpp中找到CreateFileA调用(约第 450 行),将:

hFile = CreateFileA( pszFilename, dwDesiredAccess, dwShareMode, 0, dwCreationDisposition, dwFlagsAndAttributes, NULL );

改为:

hFile = CreateFileA( pszFilename, dwDesiredAccess, dwShareMode, (LPSECURITY_ATTRIBUTES)0, dwCreationDisposition, dwFlagsAndAttributes, NULL );

提示:这三个补丁是血泪经验总结。曾有某开发者跳过补丁三,强行用-fpermissive编译通过,结果生成的gdal.dll在 Windows XP 上调用VSIFOpenL时随机崩溃——因为类型擦除导致栈帧错位。补丁不是“玄学”,是 MinGW32 ABI 的刚性要求。


4. 编译、安装与验证:从make到gdalinfo --version的最小可行路径

完成补丁后,执行标准 GNU 构建流程。注意:必须在 MinGW32 的 shell(如 MSYS 的/bin/sh)中执行,不能在 Windows CMD 或 PowerShell 中运行。

4.1 执行 make:控制并发与内存占用的实操技巧

GDAL 1.11.5 的make过程内存峰值超 1.2GB,老旧机器易 OOM。推荐分步编译:

# 仅编译核心库(跳过所有驱动,最快验证) $ make libgdal.la # 若成功,再编译全部(含 VRT、MEM 等安全驱动) $ make -j1 # 强制单线程,避免 MinGW32 make 的 race condition

-j1是关键:MinGW32 的make 3.82对并行任务调度有 bug,-j2可能导致libtool生成空.la文件,进而使make install失败。

编译成功标志是终端最后输出:

make[1]: Leaving directory `/home/user/gdal-1.11.5/ogr' make: Leaving directory `/home/user/gdal-1.11.5'

且./.libs/libgdal.a文件大小 > 12MB(未 strip 前)。

4.2 安装到 MinGW32 prefix:确保头文件与库路径对齐

$ make install

成功后检查/mingw32目录结构:

/mingw32/ ├── include/ │ ├── gdal.h │ ├── ogr_core.h │ └── cpl_conv.h ├── lib/ │ ├── libgdal.a # 静态库 │ ├── libgdal.dll.a # 导入库 │ └── gdal.dll # 动态库 └── bin/ └── gdalinfo.exe # 命令行工具

特别验证libgdal.dll.a是否存在:这是 MinGW32 链接动态库的必需导出库,缺失则g++ -lgdal会报cannot find -lgdal。

4.3 验证:用gdalinfo和最小 C 程序双保险确认

先运行命令行工具:

$ /mingw32/bin/gdalinfo.exe --version GDAL 1.11.5, released 2016/02/02

再写一个最小验证程序test_gdal.c:

#include <stdio.h> #include "gdal.h" int main() { GDALAllRegister(); printf("GDAL version: %s\n", GDALVersionInfo("RELEASE_NAME")); return 0; }

编译并运行:

$ i686-pc-mingw32-gcc -I/mingw32/include test_gdal.c -L/mingw32/lib -lgdal -o test_gdal.exe $ ./test_gdal.exe GDAL version: 1.11.5

注意:-L/mingw32/lib必须显式指定,因为 MinGW32 的gcc默认不搜索/mingw32/lib;-lgdal会自动链接libgdal.dll.a,生成的test_gdal.exe依赖gdal.dll,需确保gdal.dll在 PATH 或同目录。


5. 避坑指南:GDAL 1.11.5 + MinGW32 的 5 个高频翻车点与后悔药

这些不是理论风险,是某开发者在连续 37 小时调试后记下的真实日志。每一条都附带「现象 → 原因 → 解决」,可直接 Ctrl+F 搜索排障。

5.1 现象:make install报错cp: cannot stat '.libs/libgdal.dll': No such file

原因:configure时未正确识别--host=i686-pc-mingw32,导致libtool生成规则错误,.libs/下只有libgdal.a,无 DLL。
解决:重新运行./configure,严格检查输出中host是否为i686-pc-mingw32;若仍是x86_64-w64-mingw32,说明你用了 MSYS2 工具链,必须切换回原生 MinGW32。

5.2 现象:gdalinfo.exe运行报错The procedure entry point _ZSt20__throw_length_errorPKc could not be located

原因:链接了 GCC 4.9+ 的libstdc++-6.dll,而 GDAL 1.11.5 编译时用 GCC 4.8.1,ABI 不兼容。
解决:将 MinGW32 的bin/libstdc++-6.dll(GCC 4.8.1 版本)复制到gdalinfo.exe同目录,或用ntldd -R gdalinfo.exe检查实际依赖的libstdc++路径,替换为正确版本。

5.3 现象:C++ 程序链接时报undefined reference to 'OGRRegisterAll'

原因:OGRRegisterAll()在 GDAL 1.11.5 中是ogr/ogrsf_frmts/ogrsf_frmts.cpp中的弱符号,若未链接任何 OGR 驱动(如--without-ogr),该符号会被优化掉。
解决:确保configure未加--without-ogr;若必须精简,手动在ogr/ogrsf_frmts/ogrsf_frmts.cpp末尾添加OGRRegisterAll();调用,强制引用。

5.4 现象:gdal_translate读取 GeoTIFF 时崩溃,gdb显示SIGSEGV在tiffio.h的TIFFClientOpen

原因:GDAL 1.11.5 的--with-libtiff选项在 MinGW32 下会链接错误的libtiff,而我们禁用了所有外部库,应启用内置 TIFF。
解决:删除--without-tiff,改为--with-tiff=internal,并确保nmake或make时tiff目录被编译(make -C tiff)。

5.5 现象:make卡死在ogr/ogrsf_frmts/shape/ogrshapelayer.cpp,CPU 100%,30 分钟无响应

原因:GCC 4.8.1 的-O2优化器在处理该文件的模板实例化时陷入无限循环。
解决:临时降低优化等级,在ogr/ogrsf_frmts/shape/Makefile中找到CXXFLAGS行,将-O2改为-O1,再make。

提示:以上五条,每一条都曾让我重编三次 GDAL。最深的教训是——不要相信 configure 的输出日志,要信file .libs/libgdal.a的输出。file命令能告诉你这个.a文件是否真的是 i686 架构、是否含调试符号、是否被 strip。这是比任何日志都可靠的“黑匣子”。


6. 进阶技巧:为遗留项目定制 GDAL 1.11.5 的轻量级发行包

当你终于让gdalinfo --version正常输出,下一步不是庆祝,而是思考:如何把这个脆弱的胜利固化为可复用、可交付的资产?我一般会做三件事,它们共同构成一个“GDAL 1.11.5 MinGW32 发行包”的最小闭环。

6.1 构建可移植的 ZIP 包:剥离路径依赖,只留 runtime 必需项

目标是生成一个gdal-1.11.5-mingw32.zip,解压后即可在任意 Windows 机器上运行gdalinfo,无需安装 MinGW32。关键操作:

  1. 收集所有gdalinfo.exe依赖的 DLL:

    $ ntldd -R /mingw32/bin/gdalinfo.exe | grep "=>.*dll" | awk '{print $3}' | sort -u

    输出类似:

    /mingw32/bin/libgcc_s_dw2-1.dll /mingw32/bin/libstdc++-6.dll /mingw32/bin/libwinpthread-1.dll /mingw32/bin/gdal.dll
  2. 将这些 DLL 与gdalinfo.exe、gdal_translate.exe等工具一起打包,不包含.a、.la、头文件——这是 runtime 包,不是 dev 包。

  3. 在 ZIP 根目录放一个README.txt,明确写:

    本包基于 GDAL 1.11.5 + MinGW32 GCC 4.8.1 编译,仅支持 Windows 32 位系统。
    无需安装,解压后双击gdalinfo.exe即可运行。
    所有 DLL 已随包提供,PATH 无需设置。

这样生成的 ZIP 包体积 < 8MB,可直接发给测试同事,他们不用懂 MinGW,也能验证你的地理数据处理逻辑。

6.2 为 CMake 项目注入 GDAL:编写FindGDAL.cmake的最小实现

如果你的主项目用 CMake,需要让find_package(GDAL)找到这个手工编译的 GDAL。不必用复杂的GDALConfig.cmake,一个 20 行的FindGDAL.cmake足够:

# FindGDAL.cmake find_path(GDAL_INCLUDE_DIR NAMES gdal.h PATHS /mingw32/include) find_library(GDAL_LIBRARY NAMES gdal PATHS /mingw32/lib) if(GDAL_INCLUDE_DIR AND GDAL_LIBRARY) set(GDAL_FOUND TRUE) set(GDAL_LIBRARIES ${GDAL_LIBRARY}) set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR}) message(STATUS "Found GDAL: ${GDAL_LIBRARY}") else() set(GDAL_FOUND FALSE) message(FATAL_ERROR "GDAL not found. Please install GDAL 1.11.5 for MinGW32.") endif()

将其放入项目cmake/Modules/目录,并在CMakeLists.txt中添加:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") find_package(GDAL REQUIRED) target_include_directories(myapp PRIVATE ${GDAL_INCLUDE_DIRS}) target_link_libraries(myapp ${GDAL_LIBRARIES})

6.3 静态链接终极方案:生成完全无 DLL 依赖的 EXE

某些嵌入式场景禁止 DLL。GDAL 1.11.5 支持全静态链接,但需额外步骤:

  1. 重新configure,加--enable-static --disable-shared;
  2. make clean && make;
  3. 链接时用-static-libgcc -static-libstdc++ -static:
    $ i686-pc-mingw32-g++ -static-libgcc -static-libstdc++ -static \ test_gdal.cpp -I/mingw32/include -L/mingw32/lib -lgdal -o test_gdal_static.exe
  4. 用file test_gdal_static.exe验证输出含statically linked。

此时test_gdal_static.exe是单文件,大小约 15MB,可在无 MinGW 环境的 Windows 上直接运行。

我坚持这套流程不是为了怀旧,而是因为——在国产化替代的某些环节,你面对的不是“要不要升级”,而是“能不能动”。GDAL 1.11.5 是很多老 GIS 系统的 ABI 锚点,它的存在本身就是一个事实。与其花三个月说服甲方换架构,不如花三天把它在 MinGW32 里焊死。这很土,但有效。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 18:58:08

算法 --字符串

字符串算法题&#xff0c;本质上就是“数组操作”加上“字符编码转换”以及“人类手工计算过程的代码化”。 例题剖析 题目一&#xff1a;最长公共前缀 解法一&#xff1a; class Solution { public:string longestCommonPrefix(vector<string>& strs) {if (strs.…

作者头像 李华
网站建设 2026/10/14 18:56:51

Android内存压测实战:memtester 4.3.0交叉编译与避坑指南

简介&#xff1a;memtester-4.3.0 for Android 是一份面向 Android 应用开发与系统性能调试人员的轻量级内存压力测试工具源码包&#xff0c;适合需要排查内存泄漏、数据损坏或竞争条件等问题的中高级开发者。资源共 23 个文件&#xff0c;以 sh 脚本、h 头文件与 c 源文件为主…

作者头像 李华
网站建设 2026/10/14 18:56:21

把几十篇文献读成一个体系,科迅捷AI帮你写好博士文献综述

博士论文里的文献综述&#xff0c;常常被写成一堆文献的“汇报”&#xff1a;张三研究了什么、李四研究了什么、王五研究了什么&#xff0c;一条条列下来&#xff0c;写到最后也没有自己的观点。这种写法&#xff0c;问题不在文献读得不够多&#xff0c;而在没有建立起“读文献…

作者头像 李华
网站建设 2026/10/14 18:55:47

EPLAN电气设计资源库:提升工业自动化设计效率3-5倍

1. 项目概述&#xff1a;EPLAN电气设计资源整合作为一名在自动化行业摸爬滚打12年的电气工程师&#xff0c;我完整经历了从手工绘制电路图到数字化设计的转型过程。今天要分享的是我多年积累的EPLAN设计资源库&#xff0c;包含自主开发的设备图纸模板、经过实战检验的部件库、标…

作者头像 李华
网站建设 2026/10/14 18:55:29

GMSSL 2.5.4 Windows包使用指南:SM2/SM3/SM4命令行与C接口集成

简介&#xff1a;这份资源是面向Windows平台C/C开发者的国密算法支撑库GMSSL 2.5.4编译成品&#xff0c;适合需要在项目中集成SM2、SM3、SM4等国密算法、又不想自行折腾编译环境的工程师直接取用。压缩包共110个文件&#xff0c;约5.5MB&#xff0c;其中95个.h头文件覆盖ssl、e…

作者头像 李华
网站建设 2026/10/14 18:55:09

Android Q MTK Camera HAL3 Search Sensor机制与实战排查

做 Camera 的老司机都清楚一个道理&#xff1a;预览虚、曝光乱、对焦飘&#xff0c;最后多半能在 Sensor 这一层找到蛛丝马迹。Android Q 的 MTK Camera Hal3 Search Sensor&#xff0c;就是这条请求链路的最前端。之前我跟着调一个模拟项目里的前摄点亮任务&#xff0c;发现不…

作者头像 李华