Compiling

如何解決變數“…未在此範圍內聲明”的建構錯誤

  • September 7, 2017

我正在嘗試在GNU/Linux Debian中安裝最後一個TauDEM(使用數字高程模型的地形分析)版本,以便與 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

但是,make命令產生了這種錯誤:

‘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

搜尋了一段時間後,我找不到任何合適的答案。我的問題是:我錯過了安裝一些重要的依賴項來獲取此類錯誤。

要在GNU/Linux Debian中安裝 Taudem,您可以從以下連結下載安裝腳本:

taudem_ubuntu.tar.bz2

解壓後,移動到該文件夾並使用以下命令執行腳本(作為超級使用者):

./taudem_ubuntu.sh

腳本的成功執行還需要這些依賴:

cmake, mpi-default-bin

安裝後,選中處理選項中的複選框,然後啟動處理工具箱(處理菜單)。Taudem 地理算法應該可用。

錯誤來自OFTInteger64(某種變數)和OGR_F_GetFieldAsInteger64(函式)未定義。

這可能是由於

  1. 缺少#include, 或 (更有可能)
  2. 一個或多個預處理器宏被設置(或取消設置),使得所需的聲明永遠不可見。

如果這個程序可以為你的 Unix 預編譯,你應該主要使用它。如果沒有,您應該聯繫該軟體的作者。

引用自:https://unix.stackexchange.com/questions/346775