変数「...この範囲で宣言されていません」のビルドエラーを解決する方法

変数「...この範囲で宣言されていません」のビルドエラーを解決する方法

ついにインストールしようとしています。TauDEM(数値標高モデルを用いた地形分析) Posted inGNU/Linux DebianQGISでの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/Linux Debian次のリンクからインストールスクリプトをダウンロードできます。

taudem_ubuntu.tar.bz2

解凍後、そのフォルダに移動し、次のコマンドを使用してスクリプトをスーパーユーザーとして実行します。

./taudem_ubuntu.sh

スクリプトを正常に実行するには、次の依存関係も必要です。

cmake, mpi-default-bin

インストール後の処理オプションでチェックボックスを選択し、処理ツールボックス(処理メニュー)を実行します。 Taudem地理アルゴリズムが利用可能でなければなりません。

答え2

エラーは、OFTInteger64(ある種の変数)とOGR_F_GetFieldAsInteger64(関数)が定義されていないために発生します。

これは、次のために発生する可能性があります。

  1. 欠落#include、または(可能性が高い)
  2. 1つ以上のプリプロセッサマクロを設定(または設定解除)すると、必須宣言は表示されません。

Unix用にプリコンパイルされている場合は、主にこのプログラムを使用する必要があります。そうでない場合は、ソフトウェアの作成者に連絡する必要があります。

関連情報