そこで,ports 経由でアプリケーションを管理しているが,portmaster でアプリのアップデートをしようとすると「gdal-3.3.3_2」のアップデートでエラーがでた,という話。
まずは,いつものように「# portsnap fetch update」で ports を最新にし,それから「portmaster -aDG --no-confirm」でアプリケーションをアップデートしようとした。 すると,なぜか「gdal-3.3.3_2」から「gdal-3.4.1」へのアップデートでエラーがでた。
エラーメッセージは以下のような感じだった。
...... c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong ogr2ogr_bin.o -L/usr/ports/graphics/gdal/work/gdal-3.4.1 -lgdal -o ogr2ogr c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong ogrtindex.o -L/usr/ports/graphics/gdal/work/gdal-3.4.1 -lgdal -o ogrtindex ld: error: undefined symbol: OGRSpatialReference::GetCoordinateEpoch() const >>> referenced by ogrinfo.cpp:303 >>> ogrinfo.o:(ReportOnLayer(OGRLayer*, char const*, char const*, OGRGeometry*, bool, bool, char**, bool, bool, bool, char const*)::$_0::operator()(OGRSpatialReference const*) const) c++: error: linker command failed with exit code 1 (use -v to see invocation) c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong gdalbuildvrt_bin.o -L/usr/ports/graphics/gdal/work/gdal-3.4.1 -lgdal -o gdalbuildvrt
gmake[2]: *** [GNUmakefile:161: ogrinfo] Error 1 gmake[2]: *** Waiting for unfinished jobs.... gmake[2]: Leaving directory '/usr/ports/graphics/gdal/work/gdal-3.4.1/apps' gmake[1]: *** [GNUmakefile:123: apps-target] Error 2 gmake[1]: Leaving directory '/usr/ports/graphics/gdal/work/gdal-3.4.1' ===> Compilation failed unexpectedly. Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to the maintainer. *** Error code 1 Stop. make: stopped in /usr/ports/graphics/gdal ** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20220207-36392-1xmou4g env UPGRADE_TOOL=portupgrade UPGRADE_PORT=gdal-3.3.3_2 UPGRADE_PORT_VER=3.3.3_2 make ** Fix the problem and try again. ** Listing the failed packages (-:ignored / *:skipped / !:failed) ! graphics/gdal (gdal-3.3.3_2) (unknown build error)
こんな時によくやる作戦として,(1)「portupgrade -a」を使ってみる,(2)「make install」を使ってみる,というのを実行している。 しかし,今回はどちらの作戦もだめだった。そこで gdal の ports「/usr/ports/graphics/gdal/」の work ファイルのエラーが起こった箇所を見たりしてみた。 どうもエラーは「ld: error: undefined symbol: OGRSpatialReference::GetCoordinateEpoch() const」とあるように「OGRSpatialReference::GetCoordinateEpoch()」が定義されていない,ということみたいだった。この「GetCoordinateEpoch()」は,/usr/ports/graphics/gdal/work/gdal-3.4.1/apps/ の中の「ogrinfo.cpp」で参照されているみたいだった。そこで,GetCoordinateEpoch() が定義されてそうなヘッダーファイルを調べて ogrinfo.cpp に書き加えてみたりしたが,どうもうまくいかなかった。
なかなかうまくいかない,と2ヶ月ほどうだうだしていたのだが,ふと「undefined symbol: OGRSpatialReference::GetCoordinateEpoch() const」と検索してみた。すると FreeBSD Bugzilla の Bug 261432 - graphics/gdal: gdal-3.4.1 fails to build on 12.3-stable という項目にたどり着いた。
それによると,どうも API として新しいものを使っているのに,アップデートではそれがうまく反映されない,ということみたいだった。 なので,「pkg delete -f gdal」して,re-install しろ,と書いてあった。
そこで以下のようにすると,嘘のように簡単にエラーがなくなった…。
# pkg delete -f gdal # cd /usr/ports/graphics/gdal/ # make install cleandelete してからインストールが失敗すると困るかもなぁ,と思っていつもはやらない作戦がよかったとは…,やられた。
0 件のコメント:
コメントを投稿