GDAL开启ECW支持后C++调用提示文件格式不支持如何解决
故障原因及对应解决方案
CMake链接的GDAL版本错误
多数情况下系统会预装无ECW支持的官方GDAL版本,CMake默认会优先检索系统内置的GDAL库,而非你自行编译的带ECW支持的版本。
解决方法:执行CMake构建时手动指定你编译的GDAL的配置路径,示例命令如下:cmake .. -DGDAL_DIR=/你编译的GDAL安装路径/lib/cmake/gdal也可以在CMakeLists.txt开头添加
set(CMAKE_PREFIX_PATH "/你编译的GDAL安装路径" ${CMAKE_PREFIX_PATH})优先检索自定义安装的GDAL。运行时动态库加载优先级错误
即便编译阶段链接的是正确的GDAL库,运行时系统也可能优先加载系统自带的无ECW支持的GDAL动态库。
解决方法:- 先执行
ldd 你的可执行程序路径查看链接的libgdal.so路径是否为你自行编译的版本 - 若路径错误,运行程序前先添加动态库检索路径:
LD_LIBRARY_PATH=/你编译的GDAL安装路径/lib:/usr/local/hexagon/lib ./你的可执行程序也可以将上述两个路径添加到
/etc/ld.so.conf文件中,执行sudo ldconfig更新系统动态库缓存实现永久生效。- 先执行
代码中未初始化GDAL驱动
GDAL需要显式调用驱动注册接口才会加载所有已编译的格式驱动,很多C++代码会遗漏这一步导致ECW驱动未被加载。
解决方法:在所有GDAL文件操作代码之前,添加GDALAllRegister()调用。文件路径错误
检查代码中传入的map.ecw路径是否正确:如果用相对路径,是相对于程序运行时的工作目录而非源码目录,建议先替换为绝对路径测试是否能正常打开。
内容的提问来源于stack exchange,提问作者Alireza Rahimi
相关产品推荐
相关产品推荐

