エラーのログと対処

エラーの根本的な原因がわからないまま載せることが多いので,役には立たないかも.


GMT.jl の precompile error

GMT.jl はコンパイル失敗しやすい.
ある時のエラー.

julia> using GMT: GMT
[ Info: Precompiling GMT [5752ebe1-31b9-557e-87aa-f909b540aa54]
ERROR: LoadError: failed process: Process(`grep libgdal`, ProcessExited(1)) [1]

libgdal が探せていない?下は失敗した GMT.jl のソース部分.

_GMTver, GMTbyConda, _libgmt, _libgdal, _libproj, _GMT_bindir = get_GMTver()

if (!GMTbyConda)		# In the other case (the non-existing ELSE branch) lib names already known at this point.
	_libgmt = haskey(ENV, "GMT_LIBRARY") ? ENV["GMT_LIBRARY"] : string(chop(read(`gmt --show-library`, String)))
	@static Sys.iswindows() ?
		(Sys.WORD_SIZE == 64 ? (_libgdal = "gdal_w64.dll") : (_libgdal = "gdal_w32.dll")) : (
			Sys.isapple() ? (_libgdal = string(split(readlines(pipeline(`otool -L $(_libgmt)`, `grep libgdal`))[1])[1])) : (
				Sys.isunix() ? (_libgdal = string(split(readlines(pipeline(`ldd $(_libgmt)`, `grep libgdal`))[1])[3])) :
				error("Don't know how to install this package in this OS.")
			)
		)
	@static Sys.iswindows() ?
		(Sys.WORD_SIZE == 64 ? (_libproj = "proj_w64.dll") : (_libproj = "proj_w32.dll")) : (
			Sys.isapple() ? (_libproj = string(split(readlines(pipeline(`otool -L $(_libgdal)`, `grep libproj`))[1])[1])) : (
				Sys.isunix() ? (_libproj = string(split(readlines(pipeline(`ldd $(_libgdal)`, `grep libproj`))[1])[3])) :
				error("Don't know how to use PROJ4 in this OS.")
			)
		)
end
const GMTver, libgmt, libgdal, libproj, GMT_bindir = _GMTver, _libgmt, _libgdal, _libproj, _GMT_bindir

これをもとに下記コマンドで何が出てくるかを確認.

ldd /usr/local/gmt/lib/libgmt.so | grep libgdal

どうやら,もともと libgmt.so に libgdal が検出できていなかった模様.
GMT をソースからビルドしたため,cmake で libgdal.so のパッケージが検出できるようにして,再度 GMT をインストールすることで解決.
または,直接 libgmt.so に libgdal.so の依存関係を追加してもよい.

$ patchelf --add-needed libgdal.so libgmt.so
$ ldd libgmt.so | grep libgdal.so
        libgdal.so => /usr/lib/libgdal.so (0x00007f8e8aae4000)



GMT.jl の makecpt,-D オプション

バージョン
Julia v1.0.0
GMT v0.5.0
makecpt の -D オプションが反映されない問題.

using GMT:GMT
cpt = GMT.makecpt(C=:polar, T="-1.0/1.0", D=true, V=true)
GMT.gmt("write tmp.cpt",cpt);

で出力された tmp.cpt を見てみると,

-1	blue	0	white
0	white	1	red
B	black
F	white
N	127.5

となり,B, F に -D オプションの効果が入っていない.

(追記)issues #179で聞いたら GMT 自体のライブラリが原因らしい.
最新の GMT バージョンがリリースされたら適切に動くようになるかも.

現状では

cptfile = "tmp.cpt"
GMT.gmt("makecpt -Cpolar -T-1.0/1.0 -D -V > $cptfile")
cpt = GMT.gmt("read -Tc $cptfile")
run(`rm -f $cptfile`)

と一旦 gmt コマンドをそのまま実行し,read で読むと良い.

(さらに追記 2019/11)
GMT のバージョン6.0 をインストール後,これの libgmt.so を参照するようにしたら,-D オプションが機能した!
GMT の開発者さんありがとうございます.

registry dirty

環境は Julia v1.0.3, Ubuntu 18.04 LTS.

(v1.0) pkg> update

をすると warning が出て

┌ Warning: Some registries failed to update:
  `~/.julia/registries/General` — registry dirty

と言われた.何が dirty なのかは不明.
Issuesを読んで該当箇所を git で修正したら出なくなった.

cd ~/.julia/registries/General
git fetch origin --prune
git checkout -- .
git reset --hard origin/master


curlのエラーによるパッケージのアップデート,ビルドのエラー

バージョン: v1.0.0
Pkg.update や Pkg.build は curl でエラーが発生すると全部うまくいかない.エラーは下記の通り.

curl: (48) An unknown option was passed in to libcurl

Ubuntu/curl関係のエラーの修正をしたらビルド成功.

(謎) 数値の誤表示?

バージョン: v0.6.2

画像から.

error_num0.png

値を変更せず,全く同じことをしているのに,

julia> ϕ[24,16,1]
8.099876.....

となるはずが1度だけ

julia> ϕ[24,16,1]
8.899876.....

になっている.

Juno 更新,Atom 再起動,Pkg.update の後に precompiling error

バージョン: v0.6.2

Atom で Juno 更新,再起動,さらに Atom の REPL で

Pkg.update()

を実行した後,

using NetCDF

などを実行しようとしたら,途中でエラーが出現した.下はエラーメッセージ.

WARNING: Module Compat with uuid xxxxxxxxxxxxxx is missing from the cache.
This may mean module Compat does not support precompilation but is imported by a module that does.
ERROR: LoadError: Declaring __precompile__(false) is not allowed in files that are being precompiled.

issue #19017 や discourse.julialang.org にあることと同じようなもの.
REPL 再起動では直らず,Atom 再起動をしたらエラーがでなくなった.

Atom で Julia の REPL が起動できない

バージョン: v0.6.2

Precompiling の HttpPaser のビルドで

curl -f -o /home/miyashita/.julia/v0.6/HttpParser/deps/downloads/v2.7.1.zip -L https://github.com/nodejs/http-parser/archive/v2.7.1.zip

が実行できず,Atom で REPL が起動できなかった.エラーは下の通り.

curl: (1) Protocol "https" not supported or disabled in libcurl

何かの際に curl を再インストールして,https からダウンロードできなくなっていた.
curl の設定を直して,

curl -V

で https が含まれているのを確認した後,再度 terminal から Julia を起動して

julia> Pkg.build("HttpParser")

をしたら正常に戻った.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2021-11-08 (Mon) 08:47:09 (1060d)