WSL里面使用JLD2的问题

因为一般来说,Julia 包对 Linux 的支持比 Windows 要好,我现在开始尝试在 WSL 上面跑 Julia。
最近 JLD2 也跟进了 v1.0,于是我在 WSL 上面也安装了,跑的代码为

using JLD2, FileIO
hello = "world"
foo = :bar
@save "example.jld2" hello foo

报错为:

signal (11): Segmentation fault
in expression starting at no file:0
_write at ./pointer.jl:155 [inlined]
write at /home/cyb/.julia/packages/JLD2/IASHd/src/misc.jl:27 [inlined]
write_object_header_and_dataspace_message at /home/cyb/.julia/packages/JLD2/IASHd/src/datasets.jl:435
write_dataset at /home/cyb/.julia/packages/JLD2/IASHd/src/datasets.jl:423
write_dataset at /home/cyb/.julia/packages/JLD2/IASHd/src/datasets.jl:521 [inlined]
write at /home/cyb/.julia/packages/JLD2/IASHd/src/groups.jl:119
jl_fptr_trampoline at /buildworker/worker/package_linux64/build/src/gf.c:1829
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
write at /home/cyb/.julia/packages/JLD2/IASHd/src/JLD2.jl:327
jl_fptr_trampoline at /buildworker/worker/package_linux64/build/src/gf.c:1829
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
#3 at /home/cyb/.julia/packages/JLD2/IASHd/src/loadsave.jl:50
#jldopen#31 at /home/cyb/.julia/packages/JLD2/IASHd/src/loadsave.jl:4
jl_fptr_trampoline at /buildworker/worker/package_linux64/build/src/gf.c:1829
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
jldopen at /home/cyb/.julia/packages/JLD2/IASHd/src/loadsave.jl:2
jl_fptr_trampoline at /buildworker/worker/package_linux64/build/src/gf.c:1829
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
do_call at /buildworker/worker/package_linux64/build/src/interpreter.c:324
eval_value at /buildworker/worker/package_linux64/build/src/interpreter.c:428
eval_stmt_value at /buildworker/worker/package_linux64/build/src/interpreter.c:363 [inlined]
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:686
jl_interpret_toplevel_thunk_callback at /buildworker/worker/package_linux64/build/src/interpreter.c:799
unknown function (ip: 0xfffffffffffffffe)
unknown function (ip: 0x7f2f65c8ea8f)
unknown function (ip: 0x6)
jl_interpret_toplevel_thunk at /buildworker/worker/package_linux64/build/src/interpreter.c:808
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:787
jl_toplevel_eval_in at /buildworker/worker/package_linux64/build/src/builtins.c:622
eval at ./boot.jl:319
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
eval_user_input at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/REPL/src/REPL.jl:85
macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/REPL/src/REPL.jl:117 [inlined]
#28 at ./task.jl:259
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1536 [inlined]
start_task at /buildworker/worker/package_linux64/build/src/task.c:268
unknown function (ip: 0xffffffffffffffff)
Allocations: 19278462 (Pool: 19274441; Big: 4021); GC: 41
Segmentation fault (core dumped)

其它的库我没有试,不知道 WSL 下面使用 Julia 还有没有别的问题,希望有相关问题的人一起来探讨。

我重复不出来这个错误,可能是WSL才有的问题

julia> using JLD2, FileIO

julia> hello = "world"
"world"

julia> foo = :bar
:bar

julia> @save "example.jld2" hello foo

julia> @load "example.jld2"
2-element Array{Symbol,1}:
 :hello
 :foo
julia> versioninfo()
Julia Version 1.0.0
Commit 5d4eaca0c9 (2018-08-08 20:58 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin17.7.0)
  CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
  WORD_SIZE: 64
  LIBM: libimf
  LLVM: libLLVM-6.0.0 (ORCJIT, skylake)

我日常都在WSL(Debian)【白天】和Ubuntu【晚上】之间切换,总的来说,依赖太多的库都可能有问题。。。跟IO、GUI打交道的大概率有问题,至于GPU相关的,在WSL支持以前就别想了。。。

总之,不管是WSL还是Win下,都会有各种奇奇怪怪的问题等着你,人生苦短,我建议,不要用Windows(搞开发。。。)

你不是MS的么 :upside_down_face:

:joy::joy::joy:

现在我用的是 Ubuntu 18.04, 好像支持好了一点。
也不是所有 IO、GUI的都有问题,比如我用 Plots.jl 画的图是可以保存的。