dlopen libgmsh (>= v4.2.3) cause segment fault
Hello, I am here again :-)
When I use the official Linux SKD from the website, dlopen
is not successful:
julia> using Libdl
julia> dlopen("./libgmsh")
signal (11): Segmentation fault
in expression starting at no file:0
_ZNKSt5ctypeIwE5do_isEPKwS2_Pt at ./libgmsh.so (unknown line)
_ZNSt13__facet_shims21__numpunct_fill_cacheIcEEvSt17integral_constantIbLb1EEPKNSt6locale5facetEPSt16__numpunct_cacheIT_E at ./libgmsh.so (unknown line)
_ZNKSt6locale5facet11_M_cow_shimEPKNS_2idE at ./libgmsh.so (unknown line)
_ZNSt6locale5_Impl16_M_install_facetEPKNS_2idEPKNS_5facetE at ./libgmsh.so (unknown line)
_ZNSt6locale5_ImplC1Em at ./libgmsh.so (unknown line)
_ZNSt6locale18_S_initialize_onceEv at ./libgmsh.so (unknown line)
pthread_once at /lib64/libpthread.so.0 (unknown line)
_ZNSt6locale13_S_initializeEv at ./libgmsh.so (unknown line)
_ZNSt6localeC1Ev at ./libgmsh.so (unknown line)
_ZNSt8ios_base4InitC2Ev at ./libgmsh.so (unknown line)
unknown function (ip: 0x7fe5358199bf)
_dl_init at /lib64/ld-linux-x86-64.so.2 (unknown line)
dl_open_worker at /lib64/ld-linux-x86-64.so.2 (unknown line)
_dl_catch_error at /lib64/ld-linux-x86-64.so.2 (unknown line)
_dl_open at /lib64/ld-linux-x86-64.so.2 (unknown line)
dlopen_doit at /lib64/libdl.so.2 (unknown line)
_dl_catch_error at /lib64/ld-linux-x86-64.so.2 (unknown line)
_dlerror_run at /lib64/libdl.so.2 (unknown line)
dlopen at /lib64/libdl.so.2 (unknown line)
jl_load_dynamic_library at /buildworker/worker/package_linux64/build/src/dlload.c:189
#dlopen#3 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.1/Libdl/src/Libdl.jl:109
dlopen at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.1/Libdl/src/Libdl.jl:109 [inlined]
dlopen at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.1/Libdl/src/Libdl.jl:109
unknown function (ip: 0x7fe5a406d6a3)
jl_fptr_trampoline at /buildworker/worker/package_linux64/build/src/gf.c:1842
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2197
do_call at /buildworker/worker/package_linux64/build/src/interpreter.c:323
eval_value at /buildworker/worker/package_linux64/build/src/interpreter.c:411
eval_stmt_value at /buildworker/worker/package_linux64/build/src/interpreter.c:362 [inlined]
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:773
jl_interpret_toplevel_thunk_callback at /buildworker/worker/package_linux64/build/src/interpreter.c:885
unknown function (ip: 0xfffffffffffffffe)
unknown function (ip: 0x7fe5b8bb482f)
unknown function (ip: 0xffffffffffffffff)
jl_interpret_toplevel_thunk at /buildworker/worker/package_linux64/build/src/interpreter.c:894
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:764
jl_toplevel_eval_in at /buildworker/worker/package_linux64/build/src/toplevel.c:793
eval at ./boot.jl:328
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2197
eval_user_input at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.1/REPL/src/REPL.jl:85
macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.1/REPL/src/REPL.jl:117 [inlined]
#26 at ./task.jl:259
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2197
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1571 [inlined]
start_task at /buildworker/worker/package_linux64/build/src/task.c:572
unknown function (ip: 0xffffffffffffffff)
Allocations: 418005 (Pool: 417834; Big: 171); GC: 0
[1] 23203 segmentation fault (core dumped) julia
It's kind weird as when I use directly import it, everything seems fine:
julia> include("gmsh.jl")
Main.gmsh
julia> gmsh.initialize()
julia> gmsh.finalize()
On the other hand, if I compile the SDK myself simply with cmake3 -DENABLE_BUILD_DYNAMIC=1 -DCMAKE_INSTALL_PREFIX=/home/opt/gmsh -DENABLE_FLTK=0 ..
which works perfectly:
julia> using Libdl
julia> dlopen("./libgmsh")
Ptr{Nothing} @0x000000000294a4f0
I notice this problem only occurs on Linux SDK from the website since v4.2.3. The v4.2.2 which I tested works fine. I am curious what changes have happened since then?
~/Downloads/gmsh-4.2.2-Linux64-sdk/lib » ls pshi@discover
gmsh.jl gmsh.py libgmsh.so libgmsh.so.4.2 libgmsh.so.4.2.2
----------------------------------------------------------------------------------------------------
~/Downloads/gmsh-4.2.2-Linux64-sdk/lib » julia pshi@discover
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.1.1 (2019-05-16)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia> using Libdl
julia> dlopen("./libgmsh")
Ptr{Nothing} @0x0000000001b02d60
Best regards,
Pengcheng