编译GDAL 3.7.2二进制文件失败求助:LNK1104及PROJ_DIR问题
解决GDAL 3.7.2源码编译时PROJ依赖配置错误的问题
核心问题分析
你遇到的LNK1104找不到lib.obj的错误,根源是PROJ_DIR路径设置错误,导致CMake误将PROJ的Library目录当作目标文件路径;同时PROJ_DIR被标记为NOTFOUND,说明CMake无法识别你指定的路径为有效的PROJ安装目录。
分步解决方案
1. 修正PROJ_DIR的正确路径
conda安装的PROJ,其有效根目录是...\anaconda3\pkgs\proj-8.2.1-h5ed7ab8_0\Library,而非pkgs下的proj文件夹。这个Library目录下包含CMake识别PROJ所需的include、lib子目录及必要配置文件。
2. 重新配置CMake
- 打开CMake GUI,点击Clear Cache清空之前的错误配置
- 重新指定GDAL源码目录和二进制编译目录(target)
- 在变量列表中找到
PROJ_DIR,设置为上述的Library路径 - 点击Configure,检查以下变量是否正确赋值(无
NOTFOUND):PROJ_INCLUDE_DIR:指向...\Library\includePROJ_LIBRARY:指向...\Library\lib\proj.lib(Windows平台)
- 确认所有PROJ相关变量正常后,点击Generate
3. 验证PROJ安装完整性
检查PROJ的Library/lib目录下是否存在proj.lib文件:
- 如果不存在,说明conda安装的PROJ包不完整,执行以下命令重新安装:
conda remove proj conda install -c conda-forge proj --force-reinstall - 若仍有问题,建议直接下载PROJ官方预编译二进制包,解压后将PROJ_DIR指向解压后的根目录,CMake会更易识别。
4. 正确构建GDAL
- 用对应版本的VS打开target目录下的解决方案
- 确保VS的平台(x86/x64)与PROJ的编译平台一致
- 右键点击INSTALL目标,选择Build,编译完成后,生成的DLL、lib和头文件会自动输出到
target\install目录,方便后续C++项目引用。
错误信息回顾
LNK1104 cannot open file '...\anaconda3\pkgs\proj-8.2.1-h5ed7ab8_0\Library\lib.obj' gdal "...\gdal-3.7.2\target\LINK"
该错误是CMake错误解析PROJ路径导致的,修正PROJ_DIR后即可解决。
内容的提问来源于stack exchange,提问作者Chipmunk
相关产品推荐
相关产品推荐

