如何解决变量“...未在此范围内声明”的构建错误

如何解决变量“...未在此范围内声明”的构建错误

我正在尝试最后安装TauDEM(使用数字高程模型进行地形分析)发布于GNU/Linux Debian用于 QGIS 中的 Python 处理。可以观看安装说明这里。在我的系统中安装一些依赖项(cmake、mpi-default-bin)后,当我运行以下命令时:

CXX=mpicxx cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..

我得到了成功的结果:

-- The C compiler identification is GNU 4.9.2
-- The CXX compiler identification is GNU 4.9.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/mpicxx
-- Check for working CXX compiler: /usr/bin/mpicxx -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found MPI_C: /usr/lib/libmpi.so;/usr/lib/i386-linux-gnu/libdl.so;/usr/lib/i386-linux-gnu/libhwloc.so  
-- Found MPI_CXX: /usr/lib/libmpi_cxx.so;/usr/lib/libmpi.so;/usr/lib/i386-linux-gnu/libdl.so;/usr/lib/i386-linux-gnu/libhwloc.so  
-- Found GDAL: /usr/lib/libgdal.so  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/zeito/TauDEM-5.3.8/src/build

然而,制作命令产生了这种错误:

‘OFTInteger64’ was not declared in this scope

作为这个完整上下文的主要部分:

Scanning dependencies of target aread8
[  0%] Building CXX object CMakeFiles/aread8.dir/aread8mn.cpp.o
[  1%] Building CXX object CMakeFiles/aread8.dir/aread8.cpp.o
[  2%] Building CXX object CMakeFiles/aread8.dir/commonLib.cpp.o
/home/zeito/TauDEM-5.3.8/src/commonLib.cpp: In function ‘char* getLayername(char*)’:
/home/zeito/TauDEM-5.3.8/src/commonLib.cpp:399:10: warning: address of local variable ‘layername’ returned [-Wreturn-local-addr]
     char layername[MAXLN];
          ^
[  3%] Building CXX object CMakeFiles/aread8.dir/tiffIO.cpp.o
[  4%] Building CXX object CMakeFiles/aread8.dir/ReadOutlets.cpp.o
/home/zeito/TauDEM-5.3.8/src/ReadOutlets.cpp: In function ‘int readoutlets(char*, char*, int, int, OGRSpatialReferenceH, int*, double*&, double*&, int*&)’:
/home/zeito/TauDEM-5.3.8/src/ReadOutlets.cpp:165:24: error: ‘OFTInteger64’ was not declared in this scope
     else if (idtype == OFTInteger64) {
                        ^
/home/zeito/TauDEM-5.3.8/src/ReadOutlets.cpp:166:63: error: ‘OGR_F_GetFieldAsInteger64’ was not declared in this scope
      id[nxy] = (int)OGR_F_GetFieldAsInteger64(hFeature1, idfld);
                                                               ^
CMakeFiles/aread8.dir/build.make:146: recipe for target 'CMakeFiles/aread8.dir/ReadOutlets.cpp.o' failed
make[2]: *** [CMakeFiles/aread8.dir/ReadOutlets.cpp.o] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/aread8.dir/all' failed
make[1]: *** [CMakeFiles/aread8.dir/all] Error 2
Makefile:117: recipe for target 'all' failed
make: *** [all] Error 2

搜索了一段时间后,我找不到任何合适的答案。我的问题是:我错过了安装一些重要的依赖项来获取此类错误。

答案1

安装 TaudemGNU/Linux Debian您可以从此链接下载安装脚本:

taudem_ubuntu.tar.bz2

解压后,移动到该文件夹​​并使用以下命令运行脚本(作为超级用户):

./taudem_ubuntu.sh

脚本的成功执行还需要这些依赖项:

cmake, mpi-default-bin

安装后,选中处理选项中的复选框,然后启动处理工具箱(处理菜单)。 Taudem 地理算法应该可用。

答案2

该错误来自OFTInteger64(某种变量)和OGR_F_GetFieldAsInteger64(函数)未定义。

这可能是由于

  1. 缺失#include, 或(更有可能)
  2. 一个或多个预处理器宏的设置(或取消设置)使得所需的声明永远不可见。

如果这个程序是为您的 Unix 预编译的,您应该主要使用它。如果没有,您应该联系该软件的作者。

相关内容