변수 "...이 범위에서 선언되지 않았습니다"에 대한 빌드 오류를 해결하는 방법

변수 "...이 범위에서 선언되지 않았습니다"에 대한 빌드 오류를 해결하는 방법

드디어 설치하려고 하는데TauDEM(수치표고모델을 이용한 지형분석) Posted inGNU/리눅스 데비안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

타우뎀 설치GNU/리눅스 데비안다음 링크에서 설치 스크립트를 다운로드할 수 있습니다.

taudem_ubuntu.tar.bz2

압축을 푼 후 해당 폴더로 이동하고 다음 명령을 사용하여 스크립트를 슈퍼유저로 실행합니다.

./taudem_ubuntu.sh

스크립트를 성공적으로 실행하려면 다음과 같은 종속성도 필요합니다.

cmake, mpi-default-bin

설치 후 처리 옵션에서 확인란을 선택하고 처리 도구 상자(처리 메뉴)를 실행합니다. Taudem 지리 알고리즘을 사용할 수 있어야 합니다.

답변2

오류는 OFTInteger64(일종의 변수) 및 OGR_F_GetFieldAsInteger64(함수)가 정의되지 않았기 때문에 발생합니다.

이는 다음으로 인해 발생할 수 있습니다.

  1. 누락 #include, 또는 (가능성이 더 높음)
  2. 하나 이상의 전처리기 매크로를 설정(또는 설정 해제)하면 필수 선언이 표시되지 않습니다.

Unix용으로 사전 컴파일된 경우 주로 이 프로그램을 사용해야 합니다. 그렇지 않은 경우 소프트웨어 작성자에게 문의해야 합니다.

관련 정보